有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。
给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。
为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。
最后返回经过上色渲染后的图像。
class Solution {
public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
int oldColor = image[sr][sc];
dfs(image,sr,sc,oldColor,newColor);
return image;
}
//深度优先搜索
public void dfs(int[][] image, int i, int j , int Color , int newColor) {
int x = image.length;
int y = image[0].length;
//判断边界
if (i < 0 || i >= x || j < 0 || j >= y || image[i][j] != Color || image[i][j] == newColor) return;
//操作
image[i][j] = newColor;
//递归进一步搜索
dfs(image, i+1 , j , Color,newColor);
dfs(image,i,j+1,Color,newColor);
dfs(image,i-1,j,Color,newColor);
dfs(image,i,j-1,Color,newColor);
}
}