[LeetCode]542. 01 Matrix

来源:互联网 发布:淘宝十字绣代绣可靠吗 编辑:程序博客网 时间:2024/06/06 12:47

https://leetcode.com/problems/01-matrix/#/description

给一个二维01数组,找出每个位置和最近的0的距离







BFS

先把所有0入队,把1置为MAX_VALUE,然后把最靠近0的1的距离算出来,然后将他们入队,再算距离最靠近0的1的1的距离算出来,依次处理

public class Solution {    public List<List<Integer>> updateMatrix(List<List<Integer>> matrix) {        int m = matrix.size();        int n = matrix.get(0).size();                Queue<int[]> queue = new LinkedList<>();        for (int i = 0; i < m; i++) {            for (int j = 0; j < n; j++) {                if (matrix.get(i).get(j) == 0) {                    queue.offer(new int[] {i, j});                }                else {                    matrix.get(i).set(j, Integer.MAX_VALUE);                }            }        }                int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};                while (!queue.isEmpty()) {            int[] cell = queue.poll();            for (int[] d : dirs) {                int r = cell[0] + d[0];                int c = cell[1] + d[1];                if (r < 0 || r >= m || c < 0 || c >= n ||                     matrix.get(r).get(c) <= matrix.get(cell[0]).get(cell[1]) + 1) continue;                queue.add(new int[] {r, c});                matrix.get(r).set(c, matrix.get(cell[0]).get(cell[1]) + 1);            }        }                return matrix;    }}


0 0
原创粉丝点击