每日一题-Day33-图像渲染
题目
给定一个二维数组,每个整数代表一个像素值,现在给你一个坐标(sr,sc)和一个新的颜色值newcolor,以坐标为起点将上下左右的四个方向上的坐标进行染色(像素值相同),直到将所有满足条件的染色完成
示例:
输入:
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]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flood-fill
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
深度优先:采用递归的方式,将每个满足条件的像素点进行染色,重点在于理解往上下左右各走一步的概念
class Solution {
public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
helper(image, sr, sc, newColor, image[sr][sc]);
return image;
}
void helper(int[][] image, int sr, int sc, int newColor, int oldColor) {
if (sr < 0 || sc < 0 || sr >= image.length || sc >= image[0].length
|| image[sr][sc] != oldColor || newColor == oldColor){
return;
}
//对满足的像素点进行染色
image[sr][sc] = newColor;
//往上下左右各走一步
helper(image, sr - 1, sc, newColor, oldColor);
helper(image, sr + 1, sc, newColor, oldColor);
helper(image, sr, sc - 1, newColor, oldColor);
helper(image, sr, sc + 1, newColor, oldColor);
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flood-fill/