题面1:01矩阵(leetcode 542)
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
输入:
0 0 0 0 1 0 1 1 1
输出:
0 0 0 0 1 0 1 2 1
public int[][] l542(int[][] matrix) {
int row = matrix.length;
int column = matrix[0].length;
//从左上到右下给0的右下方的位置赋值
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
int x = 10001, y = 10001;
if (matrix[i][j] != 0) {
if (i > 0) {
x = matrix[i - 1][j];
}
if (j > 0) {
y = matrix[i][j - 1];
}
matrix[i][j] = Math.min(x, y) + 1;
}
}
}
//从右下到左上给0的左上方的位置赋值
for (int i = row - 1; i >= 0; i--) {
for (int j = column - 1; j >= 0; j--) {
int x = 10001, y = 10001;
if (matrix[i][j] != 0) {
if (i < row - 1) {
x = matrix[i + 1][j];
}
if (j < column - 1) {
y = matrix[i][j + 1];
}
//该位置已经被赋值了,比较哪个是最小的,再填入
matrix[i][j] = Math.min(Math.min(x, y) + 1, matrix[i][j]);
}
}
}
return matrix;
}