1.题目描述

2.解题思路
1)边遍历边置零(错误解法,因为边置零到后面遍历到前面置零得元素)
cpp
void setZeroes(vector<vector<int>>& matrix) {
int row = matrix.size();//行数
int col = matrix[0].size();//列数
for(int i = 0;i<=row-1;i++){//遍历每一行
for(int j = 0;j<=col-1;j++){//遍历该行每一个元素
if(matrix[i][j]==0){
for(int k = 0;k<=col-1;k++){
matrix[i][k]= 0;
}
for(int m = 0;m<=row-1;m++){
matrix[m][j]=0;
}
}
}
}
}
2)先标记,再统一置零
cpp
void setZeroes(vector<vector<int>>& matrix) {
int row = matrix.size();//行数
int col = matrix[0].size();//列数
vector<int> tag_row(row,0);
vector<int> tag_col(col,0);
//put tag做标记
for(int i = 0;i<=row-1;i++){//遍历每一行
for(int j = 0;j<=col-1;j++){//遍历该行每一个元素
if(matrix[i][j]==0){
tag_row[i] = 1;
tag_col[j] = 1;
}
}
}
//put zero置零
for(int i = 0;i<=row-1;i++){//遍历每一行
for(int j = 0;j<=col-1;j++){//遍历该行每一个元素
if(tag_row[i]==1 || tag_col[j]==1){
matrix[i][j]=0;
}
}
}
}