给定一个由 0 和 1 组成的矩阵,找出每一个元素到最近的 0 的距离。java
两个相邻元素间的距离为 1 。code
示例 1:
输入:队列
0 0 0 0 1 0 0 0 0
输出:it
0 0 0 0 1 0 0 0 0
示例 2:
输入:io
0 0 0 0 1 0 1 1 1
输出:class
0 0 0 0 1 0 1 2 1
注意:date
思路:BFS 的思路,将矩阵位置为 0 的下标压进队列,并将不为 0 的元素置为 Integer 的最大值。而后进行处理,逐渐将队列中的元素出队处理,看看这个出队的元素的上下左右方位,是否为 Integer 最大值,注意要下标越界的判断。List
代码:queue
class Solution { public int[][] updateMatrix(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; Queue<int[]> queue = new LinkedList<>(); for(int i = 0;i < m;++i){ for(int j = 0;j < n;++j){ if(matrix[i][j] == 0){ queue.offer(new int[]{i,j}); }else{ matrix[i][j] = Integer.MAX_VALUE; } } } int[] dir = {{1,0},{-1,0},{0,1},{0,-1}}; while(!queue.isEmpty()){ int[] unit = queue.poll(); for(int[] pos : dir){ int x = unit[0] + pos[0]; int y = unit[1] + pos[1]; if(x < 0 || x >= m || y < 0 || y >= n || matrix[x][y] <= matrix[unit[0]][unit[1]]+1){ continue; } queue.offer(new int[]{x,y}); matrix[x][y] = matrix[unit[0]][unit[1]] + 1; } } return matrix; } }