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; } } }