此题的关键是要矩阵的第一行第一列来存储对应的行列是否要变0,提前记录好1行一列是否要变0,最后处理即可。
另一种思路(慢了)
由于矩阵不算太大,可以找一个矩阵里不存在的数作为标志数,横着扫一遍,全变0,存好标志数,再竖着来一遍,把标志数对应的列变0即可。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
if(matrix.size() == 0 || matrix[0].size() == 0)return;
int sign = -99768;
// 横着扫
for(int i=0;i<matrix.size();i++)
{
int zero = 0;
for(int j=0;j<matrix[0].size();j++)
{
if(matrix[i][j] == 0)
{
matrix[i][j] = sign;
zero = 1;
}
}
if(zero == 1)
for(int j=0;j<matrix[0].size();j++)
if(matrix[i][j] != sign)
matrix[i][j] = 0;
}
// 竖着扫
for(int j=0;j<matrix[0].size();j++)
{
int zero = 0;
for(int i=0;i<matrix.size();i++)
{
if(matrix[i][j] == sign)
{
zero = 1;
break;
}
}
if(zero == 1)
for(int i=0;i<matrix.size();i++)
matrix[i][j] = 0;
}
}
};