# 解题思路
一开始的想法就是单纯的遍历然后剪枝,但不知道为什么就双百了 所以分享一下自己的思路: 首先,要求到最近的0的距离,肯定不能单次遍历就能找到准确的值,毕竟信息量过于小 然后,这题很像之前做的那个最大距离(同样也是矩阵遍历BFS),我就想到了应该用类似的思路 之后观察题,很容易想到可以从0开始bfs遍历,当然只向着1去搜索,由于是多源的bfs,所以需要多次遍历 但要注意剪枝,我的一个关键剪枝思路就是把与0不相邻的1都变成-1 然后遍历的时候只需要考察这些-1就好了
# 代码
class Solution {
public int[][] updateMatrix(int[][] matrix) {
int ylen = matrix.length;
int xlen=matrix[0].length;
int count = 0;
for (int i=0 ;i<ylen; i++) {
for (int j = 0; j < xlen; j++) {
if (matrix[i][j] == 0) {
count++;
}
else {
if (j > 0 && matrix[i][j - 1] == 0) {
count++;
}
else if (i > 0 && matrix[i - 1][j] == 0) {
count++;
}
else if (j < xlen - 1 && matrix[i][j + 1] == 0) {
count++;
}
else if (i < ylen - 1 && matrix[i + 1][j] == 0) {
count++;
}
else matrix[i][j]=-1;
}
}
}
int k=1;
while (count < ylen * xlen) {
for (int i=0 ;i<ylen; i++) {
for (int j = 0; j < xlen; j++) {
if (matrix[i][j] == -1) {
if (j > 0 && matrix[i][j - 1] == k) {
matrix[i][j]=k+1;
count++;
}
else if (i > 0 && matrix[i - 1][j] == k) {
matrix[i][j]=k+1;
count++;
}
else if (j < xlen - 1 && matrix[i][j + 1] == k) {
matrix[i][j]=k+1;
count++;
}
else if (i < ylen - 1 && matrix[i + 1][j] ==k) {
matrix[i][j]=k+1;
count++;
}
}
}
}
k++;
}
return matrix;
}
}
432

被折叠的 条评论
为什么被折叠?



