标签:mat poll lin none 链接 维护 技术 灵活 vector
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1:
输入:
0 0 0
0 1 0
0 0 0
输出:
0 0 0
0 1 0
0 0 0
示例 2:
输入:
0 0 0 0 1 0 1 1 1
1 class Solution { 2 public int[][] updateMatrix(int[][] matrix) { 3 int row = matrix.length; 4 int col = matrix[0].length; 5 //灵活应对四个方向的变化 6 int[][] vector = new int[][]{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; 7 Queue<int[]> queue = new LinkedList<>(); 8 for (int i = 0; i < row; i++) { 9 for (int j = 0; j < col; j++) { 10 if (matrix[i][j] == 0) { 11 // 将所有 0 元素作为 BFS 第一层 12 queue.add(new int[]{i, j}); 13 } else { 14 //设一个最大值 15 matrix[i][j] = row + col; 16 } 17 } 18 } 19 while (!queue.isEmpty()) { 20 int[] s = queue.poll(); 21 // 搜索上下左右四个方向 22 for (int[] v : vector) { 23 int r = s[0] + v[0]; 24 int c = s[1] + v[1]; 25 if (r >= 0 && r < row && c >= 0 && c < col){ 26 if (matrix[r][c] >= matrix[s[0]][s[1]] + 1){ 27 matrix[r][c] = matrix[s[0]][s[1]] + 1; 28 queue.add(new int[]{r, c}); 29 } 30 } 31 } 32 } 33 return matrix; 34 } 35 }
标签:mat poll lin none 链接 维护 技术 灵活 vector
原文地址:https://www.cnblogs.com/szzla/p/12685782.html