算法期中练习——1003. 最近的0
Description:
Example:
例如:
A=
1 1 1
0 1 1
0 0 1答案为
1 2 3
0 1 2
0 0 1
请为下面的Solution类实现解决这一问题的函数nearestZero,函数参数A为给出的01矩阵,A的行数和列数均不大于100. 函数的返回值是问题的答案.1
2
3
4
5
6class Solution {
public:
vector<vector<int>> nearestZero(vector<vector<int>>& A) {
}
};
Solution #1:
暴力破解法:遍历二维数组,判断每一个位置上的数是否为0,若为0,即该位置到0的最近距离为0;反之,即该位置上的数不为0,此时再遍历二维数组,不断更新该位置上的数到0的最近距离,具体用到下面这条公式:dist[i][j] = min(dist[i][j], abs(k - i) + abs(l - j));
代码如下
1 | class Solution { |
Solution #2:
遍历二维数组,将数值为0的位置(i, j)
加入队列queue中,且置ans[i][j]=0
,反之置为-1。
然后遍历队列,判断位置为0的上下左右是否不为0,即ans[row][col]==-1
,若为-1,更新ans[i][j]=ans[u.first][u.second]+1
,表示相邻的不为0的位置到0的最小距离可以为1,然后将(row, col)
加入队列queue中,继续循环。
代码如下
1 | class Solution { |