leetcode 542. 01 Matrix(01矩阵)


矩阵中只有0,1值,返回每个cell到最近的0的距离。

思路:

0元素到它自己的距离是0,

只需考虑1到最近的0是多少距离。

BFS.

先把元素1处的距离更新为无穷大。

0的位置装入queue。

从每个0出发,走上下左右4个方向,遇到0不需要处理,遇到1,距离为当前距离+1.

如果当前距离+1 比下一位置的距离小,

把下一位置的距离更新为当前距离+1,同时说明从下一位置出发的距离都需要更新,装入queue.

java 复制代码
    public int[][] updateMatrix(int[][] mat) {
        int rows = mat.length;
        int cols = mat[0].length;

        Queue<int[]> queue = new LinkedList<>();
        int max = rows * cols;

        //初始化,0处加入queue, 1处设为最大值
        for(int r = 0; r < rows; r++) {
            for(int c = 0; c < cols; c++) {
                if(mat[r][c] == 0) queue.offer(new int[]{r,c});
                else mat[r][c] = max;
            }
        }

        int[] direc = new int[]{-1,0,1,0,-1};

        while(!queue.isEmpty()) {
            int[] cur = queue.poll();
            for(int i = 0; i < 4; i++) {
                int nextR = cur[0] + direc[i];
                int nextC = cur[1] + direc[i+1];
                if(nextR >= 0 && nextR < rows && nextC >= 0 && nextC < cols && mat[cur[0]][cur[1]]+1 < mat[nextR][nextC]){
                    mat[nextR][nextC] = mat[cur[0]][cur[1]]+1;
                    queue.offer(new int[]{nextR, nextC});
                }
            }
        }
        return mat;
    }
相关推荐
Jeremy爱编码1 分钟前
leetcode课程表
算法·leetcode·职场和发展
努力学算法的蒟蒻21 分钟前
day46(12.27)——leetcode面试经典150
算法·leetcode·面试
元亓亓亓2 小时前
LeetCode热题100--152. 乘积最大子数组--中等
算法·leetcode·职场和发展
梭七y3 小时前
【力扣hot100题】(103)移动零
数据结构·算法·leetcode
Jeremy爱编码4 小时前
leetcode热题腐烂的橘子
算法·leetcode·职场和发展
alphaTao4 小时前
LeetCode 每日一题 2025/12/22-2025/12/28
算法·leetcode
小白菜又菜5 小时前
Leetcode 1523. Count Odd Numbers in an Interval Range
算法·leetcode
RedMery5 小时前
厄米特矩阵的性质
线性代数·矩阵
小白菜又菜6 小时前
Leetcode 944. Delete Columns to Make Sorted
算法·leetcode
Swift社区8 小时前
LeetCode 458 - 可怜的小猪
算法·leetcode·职场和发展