542.01矩阵

Posted szzla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了542.01矩阵相关的知识,希望对你有一定的参考价值。

给定一个由 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,对于每个1,一层一层向外搜索,直至找到0,这样超时了。
看了大佬们的讲解,思路豁然开朗.
首先遍历matrix,对于非零点,设置一个较大值(row+col)
维护一个队列,首先将所有零点的坐标放入队列中
取出队列中的元素(i,j),搜索(i,j)的四个方向,如果某方向上的值大于或等于(matrix[i][j]+1),就将该方向的坐标值更新为matrix[i][j]+1,这是局部正确的。
然后将该方向的坐标加入队列
重复3-4步骤,直到队列为空。
作者:ccdmw
链接:https://leetcode-cn.com/problems/01-matrix/solution/bfs-by-ccdmw-5/
来源:力扣(LeetCode)
技术图片
 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 }
View Code

 




以上是关于542.01矩阵的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0542. 01 矩阵

LeetCode 0542. 01 矩阵

Python代码阅读(第41篇):矩阵转置

如何将浮点矩阵作为 2D 纹理传递给片段着色器?

如何在 python 中并行化以下代码片段?

springboot开启矩阵传参MatrixVariable