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)的空间,用vector存储……不过要求用常数空间做。
看了一个方法,可以用set做。set类似于vector,但是存取比vector快,删除元素等操作比vector慢。并且set里的元素不可以重复。
因此本题可以利用set存储为0元素的行值和列值,并在最后把它们都置0.
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
set<int> r;
set<int> c;
for(int i = 0; i < row ; i++)
for(int j = 0; j < col; j++){
if(matrix[i][j] == 0) {
r.insert(i);//set要用insert
c.insert(j);
}
}
for(i:r)//很神奇的写法有木有
for(int j=0;j<col;j++)
matrix[i][j]=0;
for(j:c)
for(int i=0;i<row;i++)
matrix[i][j]=0;
}
};