Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)

Posted qinyuguan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)相关的知识,希望对你有一定的参考价值。

Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)

深度优先搜索的解题详细介绍,点击


 

有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。

给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。

为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。

最后返回经过上色渲染后的图像。

示例 1:

输入: 
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, newColor = 2
输出: [[2,2,2],[2,2,0],[2,0,1]]
解析: 
在图像的正中间,(坐标(sr,sc)=(1,1)),
在路径上所有符合条件的像素点的颜色都被更改成2。
注意,右下角的像素没有更改为2,
因为它不是在上下左右四个方向上与初始点相连的像素点。
注意:

image 和 image[0] 的长度在范围 [1, 50] 内。
给出的初始点将满足 0 <= sr < image.length 和 0 <= sc < image[0].length。
image[i][j] 和 newColor 表示的颜色值在范围 [0, 65535]内。

简单的难度,连VIS数组都不用,直接四个方向搜索就行了。

 

AC代码:

class Solution 
    int dirx[] = 0,0,1,-1;
    int diry[] = 1,-1,0,0;
    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) 
        if(image==null || image.length == 0) return image;
        if(image[sr][sc]==newColor) return image;
        dfs(image,sr,sc,newColor,image[sr][sc]);
        return image;
    
    public void dfs(int[][] image,int sr,int sc,int newColor,int value)
        image[sr][sc] = newColor;
        
        for(int i=0;i<4;i++)
            int xx = sr + dirx[i];
            int yy = sc + diry[i];
            if(xx>=0 && yy>=0 && xx<image.length && yy<image[0].length && image[xx][yy]==value)
                dfs(image,xx,yy,newColor,value);
            
        
    

 

以上是关于Leetcode之深度优先搜索(DFS)专题-733. 图像渲染(Flood Fill)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode之深度优先搜索(DFS)专题-DFS+记忆化 329. 矩阵中的最长递增路径(Longest Increasing Path in a Matrix)

DFS专题 | 深度优先搜索

Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game)

算法专题 之 深度优先搜索

Leetcode之深度优先搜索&回溯专题-980. 不同路径 III(Unique Paths III)

leetcode之深度优先搜索刷题总结3