73. Set Matrix Zeroes
题目:
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
题解:
O(m+n)的方法是容易想到的,而空间复杂度O(1),只要利用原矩阵的一行和一列来使用O(m+n)的方法就行了。
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
if(matrix.size() == 0) return;
int x = -1, y = -1;
for(int i = 0; i < matrix.size(); i ++)
{
for(int j = 0; j < matrix[0].size(); j ++)
{
if(matrix[i][j] == 0)
{
if(x == -1)
{
x = i, y = j;
}
else
{
matrix[x][j] = 0;
matrix[i][y] = 0;
}
}
}
}
if(x == -1) return;
for(int i = 0; i < matrix.size(); i ++)
for(int j = 0; j < matrix[0].size(); j ++)
if((matrix[x][j] == 0 || matrix[i][y] == 0) && (i != x && j != y)) matrix[i][j] = 0;
for(int i = 0; i < matrix.size(); i ++) matrix[i][y] = 0;
for(int j = 0; j < matrix[0].size(); j ++) matrix[x][j] = 0;
}
};
public:
void setZeroes(vector<vector<int> > &matrix) {
if(matrix.size() == 0) return;
int x = -1, y = -1;
for(int i = 0; i < matrix.size(); i ++)
{
for(int j = 0; j < matrix[0].size(); j ++)
{
if(matrix[i][j] == 0)
{
if(x == -1)
{
x = i, y = j;
}
else
{
matrix[x][j] = 0;
matrix[i][y] = 0;
}
}
}
}
if(x == -1) return;
for(int i = 0; i < matrix.size(); i ++)
for(int j = 0; j < matrix[0].size(); j ++)
if((matrix[x][j] == 0 || matrix[i][y] == 0) && (i != x && j != y)) matrix[i][j] = 0;
for(int i = 0; i < matrix.size(); i ++) matrix[i][y] = 0;
for(int j = 0; j < matrix[0].size(); j ++) matrix[x][j] = 0;
}
};