Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.
Follow up:
思路,找到一个0,用它对应的行和列作为记录该行或列是否要为0的空间。
Did you use extra space?
A straight forward solution using O(mn) space is probably a bad idea.
A simple improvement uses O(m + n) space, but still not the best solution.
Could you devise a constant space solution?
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
int row = -1;
int col = -1;
// Find the one element which is 0, and use its row and column for recording.
for(int ii = 0; ii < matrix.size(); ii ++) {
for(int jj = 0; jj < matrix[0].size();jj ++) {
if(matrix[ii][jj] == 0) {
row = ii;
col = jj;
break;
}
}
}
if(row == -1/*&& col == -1*/) return;
//Do recording
for(int ii = 0; ii < matrix.size(); ii ++) {
for(int jj = 0; jj < matrix[0].size(); jj ++) {
if(matrix[ii][jj] == 0) {
matrix[row][jj] = 0;
matrix[ii][col] = 0;
}
}
}
for(int ii = 0; ii < matrix.size(); ii ++) {
if(ii != row && matrix[ii][col] == 0) {
for(int jj = 0; jj < matrix[0].size(); jj ++) {
matrix[ii][jj] = 0;
}
}
}
for(int ii = 0; ii < matrix[0].size(); ii ++) {
if(ii != col && matrix[row][ii] == 0) {
for(int jj = 0; jj < matrix.size(); jj ++) {
matrix[jj][ii] = 0;
}
}
}
for(int ii = 0; ii < matrix.size(); ii ++) matrix[ii][col] = 0;
for(int ii = 0; ii < matrix[0].size(); ii ++) matrix[row][ii] = 0;
}
};