542. 01 矩阵

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/01-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
计算到0位置的最短距离。那么就从0位置开始向外扩散。扩散一圈,记录。之后根据这一圈再向外扩散。
public int[][] updateMatrix(int[][] mat) {
int m = mat.length;
int n = mat[0].length;
int[][] ret = new int[m][n];
Queue<int[]> queue = new LinkedList<>();
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
if(mat[i][j] == 0) {
queue.add(new int[]{i,j});
ret[i][j] = 0;
}
}
}
int count = 1;
while(!queue.isEmpty()) {
int size = queue.size();
for(int i=0;i<size;i++) {
int[] pos = queue.poll();
int[] dx = new int[]{0,0,1,-1};
int[] dy = new int[]{1,-1,0,0};
for(int t =0;t<4;t++) {
int newX = pos[0] + dx[t];
int newY = pos[1] + dy[t];
// 找不是0的位置
// 同时满足,这个位置还没有被设置过。
if(newX <0 || newX>=m ||newY<0 || newY>=n || mat[newX][newY]==0 || ret[newX][newY] != 0) {
continue;
}
ret[newX][newY] = count;
queue.add(new int[]{newX,newY});
}
}
count++;
}
return ret;
}
浙公网安备 33010602011771号