1) 预设标准row col,在这里是first row col
2)提前存好original 标准row 和col的状况
ref http://www.cnblogs.com/springfor/p/3888003.html
public void setZeroes(int[][] matrix) {
int row = matrix.length;
int col = matrix[0].length;
if(row*col==0) return;
boolean has0firstRow = false , has0firstCol = false ;// 之后非first row col的0会被记录到first row col,所以现在记录一下first row col是不是有0,免得和之后反水上来的0混淆
for(int i=0; i< col; i++){
if(matrix[0][i]==0) {
has0firstRow = true;
break;
}
}
for(int i=0; i<row; i++){
if(matrix[i][0]==0) {
has0firstCol = true;
break;
}
}
// check rest rows col's 0s, put them to the first row/col
for(int i=1; i<row; i++){
for(int j=1; j<col; j++){
if(matrix[i][j]==0){
matrix[i][0] =0;
matrix[0][j] =0;
}
}
}
// push into 0s according to first row/col
for(int i=1; i<row; i++){
for(int j=1; j<col; j++){
if(matrix[i][0]==0 || matrix[0][j]==0)
matrix[i][j] =0;
}
}
// check original first row/col
if(has0firstRow){
for(int i=0; i< col; i++){
matrix[0][i]=0;
}
}
if(has0firstCol){
for(int i=0; i< row; i++){
matrix[i][0]=0;
}
}
}
}