題目來源
給一個(gè)01矩陣,求矩陣中的1最近的0離它有多遠(yuǎn),更新矩陣變?yōu)橐粋€(gè)距離矩陣。
我想著從左上到右下遍歷一遍,從右下到左上遍歷一遍。
代碼如下:
class Solution {
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
int rows = matrix.size(), cols = matrix[0].size();
vector<vector<int>> dirs{{0, -1}, {-1, 0}, {1, 0}, {0, 1}};
for (int i=0; i<rows; i++)
for (int j=0; j<cols; j++) {
if (matrix[i][j] == 1) {
matrix[i][j] = 100000;
for (int k=0; k<2; k++) {
if (i+dirs[k][0] >= 0 && i+dirs[k][0] < rows && j+dirs[k][1] >= 0 && j+dirs[k][1] < cols)
matrix[i][j] = min(matrix[i][j], matrix[i + dirs[k][0]][j + dirs[k][1]] + 1);
}
}
}
for (int i=rows-1; i>=0; i--)
for (int j=cols-1; j>=0; j--) {
if (matrix[i][j] != 0) {
for (int k=2; k<dirs.size(); k++) {
if (i+dirs[k][0] >= 0 && i+dirs[k][0] < rows && j+dirs[k][1] >= 0 && j+dirs[k][1] < cols)
matrix[i][j] = min(matrix[i][j], matrix[i + dirs[k][0]][j + dirs[k][1]] + 1);
}
}
}
return matrix;
}
};