542. 01 矩阵

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/01-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


计算到0位置的最短距离。那么就从0位置开始向外扩散。扩散一圈,记录。之后根据这一圈再向外扩散。


    public int[][] updateMatrix(int[][] mat) {
        int m = mat.length;
        int n = mat[0].length;
        int[][] ret = new int[m][n];

        Queue<int[]> queue = new LinkedList<>();

        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(mat[i][j] == 0) {
                    queue.add(new int[]{i,j});
                    ret[i][j] = 0;
                }
            }
        }

        int count = 1;
        while(!queue.isEmpty()) {
            int size = queue.size();
            for(int i=0;i<size;i++) {
                int[] pos = queue.poll();
                int[] dx = new int[]{0,0,1,-1};
                int[] dy = new int[]{1,-1,0,0};

                for(int t =0;t<4;t++) {
                    int newX = pos[0] + dx[t];
                    int newY = pos[1] + dy[t];
                    // 找不是0的位置
                    // 同时满足,这个位置还没有被设置过。
                    if(newX <0 || newX>=m ||newY<0 || newY>=n || mat[newX][newY]==0 || ret[newX][newY] != 0) {
                        continue;
                    }
                    ret[newX][newY] = count;
                    queue.add(new int[]{newX,newY});
                }
                

            }
            count++;
        }

        return ret;



    }
posted @ 2022-03-01 14:47  一颗青菜  阅读(2)  评论(0)    收藏  举报