比较简单,但我只想出空间复杂度O(m+n)的方法。答案空间复杂度为O(1)的方法是将第一行第一列设为标记数组,标记哪些行列需要置零,还是很巧妙的。
cpp
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
bool row=0;
bool column=0;
for(int i=0;i<matrix.size();i++) if(matrix[i][0]==0) row=1;
for(int j=0;j<matrix[0].size();j++) if(matrix[0][j]==0) column=1;
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[0].size();j++){
if(matrix[i][j]==0){
matrix[i][0]=0;
matrix[0][j]=0;
}
}
}
for(int i=1;i<matrix.size();i++){
if(matrix[i][0]==0){
for(int j=0;j<matrix[0].size();j++) matrix[i][j]=0;
}
}
for(int i=1;i<matrix[0].size();i++){
if(matrix[0][i]==0){
for(int j=0;j<matrix.size();j++) matrix[j][i]=0;
}
}
if(row==1) for(int i=0;i<matrix.size();i++) matrix[i][0]=0;
if(column==1) for(int i=0;i<matrix[0].size();i++) matrix[0][i]=0;
}
};