// 将第一行第一列用以表示是否存在0
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix)
{
int m=matrix.size();
if(m==0)return;
int n=matrix[0].size();
if(n==0)return;
bool firstrowiszero = false;
bool firstcoliszero = false;
for(int i=0;i<m;++i)
{
if (matrix[i][0]==0)
{
firstcoliszero=true;
break;
}
}
for(int j=0;j<n;++j)
{
if(matrix[0][j]==0)
{
firstrowiszero=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 < m; ++i)
for(int j = 1; j < n; ++j)
{
if(matrix[i][0] == 0||matrix[0][j]==0) //这一步其实已经包括对特殊情况的判断了
{
matrix[i][j] =0;
}
}
if(firstcoliszero)
{
for(int i=0;i<m;++i)
{
matrix[i][0]=0;
}
}
if(firstrowiszero)
{
for(int j=0;j<n;++j)
{
matrix[0][j]=0;
}
}
}
};