LeetCode 733 图像渲染
LeetCode 733 图像渲染
给定一副代表图像的二维整型数组,其中每一个整数表示一个像素点的像素值。从某个起始点(sr, sc)
出发,将与它在上、下、左、右四个方向上相邻的所有像素值相同的点(包括起始点)的都标记为一个新的像素值newColor
。
DFS
执行用时:1 ms, 在所有 Java 提交中击败了97.15%的用户
内存消耗:40.5 MB, 在所有 Java 提交中击败了91.67%的用户
class Solution {
public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
//image不合法
if(image==null || image.length==0 || image[0].length==0) {
return image;
}
//方向数组
int[][] directs = new int[][]{
{0,1},{1,0},{0,-1},{-1,0}
};
//标记已访问
boolean[][] isVisited = new boolean[image.length][image[0].length];
dfs(image, directs, isVisited, newColor, image[sr][sc], sr, sc);
return image;
}
public void dfs(int[][] image, int[][] directs, boolean[][] isVisited, int newColor, int targetPixel, int sr, int sc) {
//超出边界、元素已访问、不是目标像素值
if((sr<0 || sr>=image.length)
|| (sc<0 || sc>=image[0].length)
|| (isVisited[sr][sc])
||(image[sr][sc]!=targetPixel)) {
return;
}
else {
//标记
isVisited[sr][sc] = true;
image[sr][sc] = newColor;
for(int[] direct:directs) {
dfs(image, directs, isVisited, newColor, targetPixel, sr+direct[0], sc+direct[1]);
}
}
}
}