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]);
            }
        }
    }
}
posted @ 2020-08-17 09:16  CodeSPA  阅读(102)  评论(0编辑  收藏  举报