给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
我们可以从左上->右下遍历一次, 更新左, 上的最近距离, 再从右下->左上遍历一次, 更新右, 下最近距
class Solution
{
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix)
{
int m = matrix.size();
int n = matrix[0].size();
vector<vector<int>> res(m, vector<int>(n, INT_MAX - 1));
//左上
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
if (matrix[i][j] == 0)
{
res[i][j] = 0;
}
else
{
if (j > 0)
{
res[i][j] = min(res[i][j], res[i][j - 1] + 1);
}
if (i > 0)
{
res[i][j] = min(res[i][j], res[i - 1][j] + 1);
}
}
}
}
//右下
for (int i = m - 1; i >= 0; --i)
{
for (int j = n - 1; j >= 0; --j)
{
if (j < n - 1)
{
res[i][j] = min(res[i][j], res[i][j + 1] + 1);
}
if (i < m - 1)
{
res[i][j] = min(res[i][j], res[i + 1][j] + 1);
}
}
}
return res;
}
};

479

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



