Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
一刷
题解:
先判断矩阵第一行和第一列是否需要清零(用boolean值保存结果),然后再扫描矩阵把需要清零的行和列标注在第一行和第一列里, 最后进行清零操作。
public class Solution {
public void setZeroes(int[][] matrix) {
if(matrix == null) return;
int n = matrix.length;
int m = matrix[0].length;
boolean firstRow = false;
boolean firstCol = false;
for(int i=0; i<n; i++) {
if(matrix[i][0] == 0){
firstCol = true;
}
}
for(int i=0; i<m; i++) {
if(matrix[0][i] == 0){
firstRow = true;
}
}
for(int i=1; i<n; i++){
for(int j=1; j<m; j++){
if(matrix[i][j] == 0){
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}
for(int i=1; i<n; i++){
if(matrix[i][0] == 0){
for(int j=1; j<m; j++){
matrix[i][j] = 0;
}
}
}
for(int j=1; j<m; j++){
if(matrix[0][j] == 0){
for(int i=1; i<n; i++){
matrix[i][j] = 0;
}
}
}
if(firstCol){
for(int i=0; i<n; i++) matrix[i][0] = 0;
}
if(firstRow){
for(int j=0; j<m; j++) matrix[0][j] = 0;
}
}
}