题目描述:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
题目链接:73. 矩阵置零
借鉴了评论区的思路:
用两个布尔变量就可以解决。
方法就是利用数组的首行和首列来记录行或列是否需要置0;
两个布尔值记录首行首列是否需要置0。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m=matrix.size();
int n;
if (m>0){
n=matrix[0].size();
}
else return;
bool row=false,col=false;
//首行是否要置0
for (int i=0;i<n;i++){
if (matrix[0][i]==0){
row=true;
break;
}
}
//首列是否要置零
for (int i=0;i<m;i++){
if (matrix[i][0]==0){
col=true;
break;
}
}
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;
}
}
for (int i=1;i<n;i++){
if (matrix[0][i]==0){
for (int j=0;j<m;j++){
matrix[j][i]=0;
}
}
}
for (int i=1;i<m;i++){
if (matrix[i][0]==0){
for (int j=0;j<n;j++){
matrix[i][j]=0;
}
}
}
if (row){
for (int i=0;i<n;i++){
matrix[0][i]=0;
}
}
if (col){
for (int j=0;j<m;j++){
matrix[j][0]=0;
}
}
}
};