![]()
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length;
if(m == 0) return;
int n = matrix[0].length;
boolean row0 = false, col0 = false; // 判断第一行有没有0 // 判断第一列有没有0;
for(int i = 0; i < m; i++) {
if(matrix[i][0] == 0) {
col0 = true;
break;
}
}
// 判断第一列有没有0;
for(int j = 0; j < n; j++) {
if(matrix[0][j] == 0) {
row0 = true;
break;
}
}
//在除去第一列与第一行的其他位置上如果有0,将这个位置对应的第一行第一列的那个元素置0
for(int i = 1; i < m; i++) {
for(int j = 1; j < n; j++) {
if(matrix[i][j] == 0) {
matrix[0][j] = matrix[i][0] = 0;
}
}
}
// 以第一行第一列的0为参照将对应的行列全部置0:
for(int i = 1; i < m; i++) {
for(int j = 1; j < n; j++) {
if(matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;
}
}
// 如果第一行第一列本来就有0, 将第一行或第一列全部置0
if(col0) {
for(int i = 0; i < m; i++) matrix[i][0] = 0;
}
if(row0) {
for(int i = 0; i < n; i++) matrix[0][i] = 0;
}
}
}