题目描述
给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。
拓展:
你的算法有使用额外的空间吗?
一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法
使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法
你能在常量级的空间复杂度内解决这个问题吗?
class Solution {
public:
void setZeroes(vector<vector<int> > &matrix) {
vector<int> row;
vector<int> col;
// 遍历找到0
for(int i = 0; i < matrix.size(); i++){
for(int j = 0; j < matrix[i].size(); j++){
if(matrix[i][j] == 0){
row.push_back(i);
col.push_back(j);
}
}
}
// 将行置0
for(int i = 0; i < row.size(); i++){
for(int j = 0; j < matrix[row[i]].size(); j++)
matrix[row[i]][j] = 0;
}
for(int i = 0; i < matrix.size(); i++){
for(int j = 0; j < col.size(); j++)
matrix[i][col[j]] = 0;
}
}
};
原因分析
- 将列置0时,写错了,将matrix[i][col[j]]写成了matrix[i][j]