力扣73:矩阵置零
题目
给定一个 m x n 的矩阵matrix,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
思路
因为要使用原地算法所以我们没法新创一个二维数组来幅值给矩阵matrix。因为要将同行和同列的所有元素全部设为0所以一个一个的遍历然后将同行列设为0的办法是不可取的,这样会导致整个矩阵最后都为0。那么更加简单的方法就是我们可以先遍历一次将矩阵中为0的元素的行列记录下来之后再进行一次遍历。第二次遍历时我们需要判断该元素所在的行列是否被记录过从而来判断是否需要将这个元素设为0。
代码
cpp
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<int> row(m);
vector<int> col(n);
//第一次遍历
for(int i = 0 ; i < m ;i++)
{
for(int j = 0;j < n;j++)
{
//如果元素值为0则记录它的行列号
if(matrix[i][j] == 0)
{
row[i] = 1;
col[j] = 1;
}
}
}
//第二次遍历
for(int i = 0;i < m ;i++)
{
for(int j = 0;j < n ;j++)
{
//如果元素的行列被记录了则将元素置为0
if(row[i] == 1 || col[j] == 1)
{
matrix[i][j] = 0;
}
}
}
}
};