73. Set Matrix Zeroes
在原地置0:
1.检查第一行和第一列是否有0,有的话用boolean记下来,因为一会需要使用这个空间来记录是否行列里有0
2.检查1到最后行&1到最后一列是否有0,记录在第一行&列中
3.检查1到最后行&1到最后列如果行or列有0,那么置零
4.利用开始的flag,对第一行&第一列置零
1 public void setZeroes(int[][] matrix) { 2 if(matrix == null || matrix.length == 0 || matrix[0].length == 0) { 3 return; 4 } 5 int row = matrix.length; 6 int col = matrix[0].length; 7 boolean rowFlag = false; 8 boolean colFlag = false; 9 for(int i = 0; i < row; i++) { 10 if(matrix[i][0] == 0) { 11 rowFlag = true; 12 break; 13 } 14 } 15 for(int i = 0; i < col; i++) { 16 if(matrix[0][i] == 0) { 17 colFlag = true; 18 break; 19 } 20 } 21 for(int i = 1; i < row; i++) { 22 for(int j = 1; j < col; j++) { 23 if(matrix[i][j] == 0) { 24 matrix[i][0] = 0; 25 matrix[0][j] = 0; 26 } 27 } 28 } 29 for(int i = 1; i < row; i++) { 30 for(int j = 1; j < col; j++) { 31 if(matrix[i][0] == 0 || matrix[0][j] == 0) { 32 matrix[i][j] = 0; 33 } 34 } 35 } 36 if(rowFlag) { 37 for(int i = 0; i < row; i++) { 38 matrix[i][0] = 0; 39 } 40 } 41 if(colFlag) { 42 for(int i = 0; i < col; i++) { 43 matrix[0][i] = 0; 44 } 45 } 46 }