初始思路分析
這段代碼實現了將矩陣中元素為0的行和列全部置零的功能。主要思路是使用標記數組記錄需要置零的行和列。以下是詳細分析:
1. 初始化階段
int m = matrix.size();
int n = matrix[0].size();
vector<bool> row(m), col(n);
- 獲取矩陣的行數
m
和列數n
- 創建兩個布爾數組:
row
數組標記哪些行需要置零(長度=m)col
數組標記哪些列需要置零(長度=n)
2. 第一次遍歷:標記階段
for(int i=0; i<m; i++) {for(int j=0; j<n; j++) {if(matrix[i][j] == 0)row[i] = col[j] = true;}
}
- 遍歷矩陣的每個元素
- 當發現元素為0時:
- 標記該行
row[i] = true
- 標記該列
col[j] = true
- 標記該行
3. 第二次遍歷:置零階段
for(int i=0; i<m; i++) {for(int j=0; j<n; j++) {if(row[i] || col[j])matrix[i][j] = 0;}
}
- 再次遍歷矩陣的每個元素
- 如果當前行被標記(
row[i]==true
)或當前列被標記(col[j]==true
) - 就將該元素置為0
class Solution {
public:void setZeroes(vector<vector<int>>& matrix) {int m=matrix.size();int n=matrix[0].size();vector<bool> row(m),col(n);for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(matrix[i][j]==0)row[i]=col[j]=true;}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(row[i]||col[j])matrix[i][j]=0;}}}
};