题目
思路
方法1,笨方法,首先想到的是,把0的位置先找出来存起来,然后对非零位置找离最近0的距离,这样算复杂度很高。
方法2,找邻域,确定与0的距离。
第一次循环,遍历所有点,如果当前点为0,跳过;否则,找其邻域4个点是否有0,如果有,跳过;如果没有,将该点的值+1;
第二次循环,如果当前点小于等于1,跳过;否则,找其邻域4个点是否有1,如果有,跳过;如果没有,将该点的值+1;
依次类推。在循环中,对跳过点计数,如果所有点都被跳过,则说明已完成,结束。
例如:
0 0 0
0 1 0
1 1 1
第一次循环后:
0 0 0
0 1 0
1 2 1
第二次循环所有元素都跳出,结束。
代码
方法1
struct Pos
{
int i;
int j;
Pos(int a,int b){i=a,j=b;}
};
vector<vector<int>> updateMatrix(