給定一個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。
兩個相鄰元素間的距離爲 1 。
示例 1:
輸入:
0 0 0
0 1 0
0 0 0
輸出:
0 0 0
0 1 0
0 0 0
示例 2:
輸入:
0 0 0
0 1 0
1 1 1
輸出:
0 0 0
0 1 0
1 2 1
注意:
給定矩陣的元素個數不超過 10000。
給定矩陣中至少有一個元素是 0。
矩陣中的元素只在四個方向上相鄰: 上、下、左、右。
public int[][] updateMatrix(int[][] matrix) {
int m = matrix.length;
int n= matrix[0].length;
Queue<int[]> q = new LinkedList<>();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(matrix[i][j]==0){
q.offer(new int[]{i,j});
}else {
matrix[i][j] = -1;
}
}
}
int dx[] = {0,0,-1,1};
int dy[] = {1,-1,0,0};
while(!q.isEmpty()){
int point[] = q.poll();
int x = point[0],y=point[1];
for(int i=0;i<4;i++){
int idx = x+dx[i];
int idy = y+dy[i];
if(idx>=0&&idx<m&&idy>=0&&idy<n&&matrix[idx][idy]==-1){
matrix[idx][idy] = matrix[x][y]+1;
q.offer(new int[]{idx,idy});
}
}
}
return matrix;
}