Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Show Similar Problems
Have you met this question in a real interview?
Yes
题目要求不能使用额外空间是这道题的关键所在,思路是遍历数组,把需要归零的行列都记录在数组的第一行和第一列中,这带来一个问题就是我们不知道到底第一行和第一列中原来是否有0,因此需要先查看第一行第一列并进行记录:
public void setZeroes(int[][] matrix) { boolean row=false; boolean column=false; for(int i=0;i<matrix.length;i++) { if (matrix[i][0] == 0) { row = true; break; } } for(int i=0;i<matrix[0].length;i++){ if(matrix[0][i]==0){ column=true; break; } } for(int i=1;i<matrix.length;i++){ for(int j=1;j<matrix[0].length;j++) { if(matrix[i][j]==0){ matrix[i][0]=0; matrix[0][j]=0; } } } for(int i=1;i<matrix.length;i++){ if(matrix[i][0]==0){ for(int j=1;j<matrix[0].length;j++) matrix[i][j]=0; } } for(int i=1;i<matrix[0].length;i++){ if(matrix[0][i]==0){ for(int j=1;j<matrix.length;j++) matrix[j][i]=0; } } if(row){ for(int i=0;i<matrix.length;i++) matrix[i][0]=0; } if(column){ for(int j=0;j<matrix[0].length;j++) matrix[0][j]=0; } }