每日一题-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/