题目
类型:HashTable
解题思路
为了防止每一列的第一个元素被提前更新,需要从最后一行开始,倒序地处理矩阵元素。比如下面这个矩阵
[0,1,2,0]
[3,4,5,2]
[1,3,1,5]
按照算法三, 之所以要从后面开始处理, 是因为如果先处理了第一行那么矩阵变成了
[0,0,0,0]
[3,4,5,2]
[1,3,1,5]
第一行的第二列和第三列的0元素影响了下面的 4, 5 和3, 1
但是其实这两个0不是本来存在的, 而是处理之后出现的
所以从下面处理, 就不会被这两个0影响了
代码
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
boolean flagCol0 = false;
for (int i = 0; i < m; i++) {
if (matrix[i][0] == 0) {
flagCol0 = true;
}
for (int j = 1; j < n; j++) {
if (matrix[i][j] == 0) {
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for (int i = m - 1; i >= 0; i--) {
for (int j = 1; j < n; j++) {
if (matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
if (flagCol0) {
matrix[i][0] = 0;
}
}
}
}