这题没什么好说的,直接标记。因为不能额外的重新复制这个矩阵,那么就标记0出现的行和列。
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
//标记每一行每一列,再把该行该列全设置为0
vector<char>r(matrix.size());
vector<char>c(matrix[0].size());
for(int i=0;i<matrix.size();i++)
{
for(int j=0;j<matrix[0].size();j++)
{
if(matrix[i][j]==0)
{
r[i]=true;
c[j]=true;
}
}
}
for(int i=0;i<matrix.size();i++)
{
for(int j=0;j<matrix[0].size();j++)
{
if(r[i]||c[j])
matrix[i][j]=0;
}
}
return;
}
};
/*
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
//标记每一行每一列,再把该行该列全设置为0
vector<int>r;
vector<int>c;
for(int i=0;i<matrix.size();i++)
{
for(int j=0;j<matrix[0].size();j++)
{
if(matrix[i][j]==0)
{
r.push_back(i);
c.push_back(j);
}
}
}
for(int i=0;i<r.size();i++)
{
for(int j=0;j<matrix[0].size();j++)
matrix[r[i]][j]=0;
}
for(int i=0;i<c.size();i++)
{
for(int j=0;j<matrix.size();j++)
matrix[j][c[i]]=0;
}
return;
}
};
*/