we must finished this problem in place.
we use the first row and the first col to store the matrix except this row and this col's value.
however , we should declare two para to record the information of the first row and the first col.
then traverse the whole matrix to change the value of the first row and the first col.
then the second time traverse, to change the value of matrix[]i[j] according to the matrix[i][0] and matrix[0][j];
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
bool rowzero = false;
bool colzero = false;
int n = matrix.size();
int m = matrix[0].size();
for(int i = 0;i<m;i++)
if(matrix[0][i] == 0)
rowzero = true;
for(int i = 0;i< n;i++)
if(matrix[i][0] == 0)
colzero = true;
for(int i = 1;i< n;i++)
for(int j = 1;j< m;j++)
{
if(matrix[i][j] == 0)
{
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
for(int i = 1;i<n;i++)
for(int j = 1;j<m;j++)
if(matrix[i][0] == 0 || matrix[0][j] == 0)
matrix[i][j] = 0;
if(rowzero)
for(int i = 0;i<m;i++)
matrix[0][i] = 0;
if(colzero)
for(int i = 0;i<n;i++)
matrix[i][0] = 0;
}
};