1. 程式人生 > 其它 >每日一題-Day33-影象渲染

每日一題-Day33-影象渲染

BFS、DFS

題目

給定一個二維陣列,每個整數代表一個畫素值,現在給你一個座標(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/