思路: 拿矩阵的第一行第一列作为0的存储。跟新建一个长度为m,n的两个array的思路一样。
第一行和列如何判断呢,加两个变量,记录第一行第一列就好了。
注意:在扫描的时候只需要从index为1的地方可是设置为0就好了
写的无比啰嗦,不过都满足条件,一遍过的ds方法。
public void setZeroes(int[][] matrix) {
boolean firstRow = false;
boolean firstCol = false;
int row = matrix.length;
int col = matrix[0].length;
//check the first row
for (int j=0; j<col; j++){
if (matrix[0][j]==0){
firstRow=true;
break;
}
}
//check the first col
for (int i=0; i<row; i++){
if (matrix[i][0]==0){
firstCol=true;
break;
}
}
//save all the results in the first col and first row
for (int i=0; i<row; i++){
for (int j=0; j<col; j++){
if (matrix[i][j]==0){
matrix[i][0]=0;
matrix[0][j]=0;
}
}
}
//check the first row
for (int j=1; j<col; j++){
if (matrix[0][j]==0){
for (int i=0; i<row; i++){
matrix[i][j]=0;
}
}
}
//check the first col
for (int i=1; i<row; i++){
if (matrix[i][0]==0){
for (int j=0; j<col; j++){
matrix[i][j]=0;
}
}
}
if (firstRow){
for (int j=0; j<col; j++){
matrix[0][j]=0;
}
}
if (firstCol){
for (int i=0; i<row; i++){
matrix[i][0]=0;
}
}
}
No comments:
Post a Comment