核心想法是:有 0 的部分,他的 col 跟 row 都要變成 0
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
bool row_flag = false, col_flag = false;
// 檢查第一row col是否需要設置為 0
for (int i = 0; i < m; i++){
if(matrix[i][0]==0){
row_flag = true;
break;
}
}
for (int i = 0; i < n; i++){
if(matrix[0][i]==0){
col_flag = true;
break;
}
}
// 第一次處裡:開始去紀錄哪些row/col要轉0(要從[1][1]開始)
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i][j]==0){
matrix[i][0]=0;
matrix[0][j]=0;
}
}
}
// 第二次處裡:開始取轉0
for(int i=1;i<m;i++){
if(matrix[i][0]==0){
for(int j=1;j<n;j++) matrix[i][j]=0;
}
}
for(int j=1;j<n;j++){
if(matrix[0][j]==0){
for(int i=1;i<m;i++) matrix[i][j]=0;
}
}
// 最後最後,再依據flag去開要不要改row=0還有col=0
if(row_flag){
for(int i=0;i<m;i++) matrix[i][0] = 0;
}
if(col_flag){
for(int j=0;j<n;j++) matrix[0][j] = 0;
}
}
};