最直接做法:拷貝一份數組,使用O(M*N)的輔助空間
記錄下要置零的行和列,使用O(M+N)的輔助空間。
原地做法:用兩個變量記錄第一行和第一列的情況,用第一行和第一列來充當記錄角色
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int n = matrix.size(), m = matrix[0].size();
int row0 = 0, col0 = 0;
for(int i=0;i<n;i++) if(matrix[i][0]==0) col0 = 1;
for(int i=0;i<m;i++) if(matrix[0][i]==0) row0 = 1;
// 看每一行
for(int i=1;i<n;i++){
for(int j=0;j<m;j++){
if(matrix[i][j]==0) matrix[i][0] = 0;
}
}
// 看每一列
for(int j=1;j<m;j++){
for(int i=0;i<n;i++){
if(matrix[i][j]==0) matrix[0][j] = 0;
}
}
// 清理每一行
for(int i=1;i<n;i++){
if(matrix[i][0]==0){
for(int j=0;j<m;j++) matrix[i][j] = 0;
}
}
// 清理每一列
for(int j=1;j<m;j++){
if(matrix[0][j]==0){
for(int i=0;i<n;i++) matrix[i][j] = 0;
}
}
if(row0) {
for(int i=0;i<m;i++) matrix[0][i] = 0;
}
if(col0){
for(int i=0;i<n;i++) matrix[i][0] = 0;
}
}
};