[LeetCode]542. 01 Matrix
阿新 • • 發佈:2019-01-23
給一個二維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; } }