编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
![](https://img-blog.csdnimg.cn/direct/8eedbcea9b3e4e6eb59de6e41acc94e4.png)
思路:遍历二位数组,判断值为0的,记录行列坐标数据,并根据坐标数据重新循环遍历行和列置0即可
!!!一定不要直接在原矩阵上操作,容易修改原有存在的“0”数据
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
vector<vector<int>> res = matrix;
for (int i = 0; i < matrix.size(); i++){
for (int j = 0; j < matrix[0].size(); j++){
if (matrix[i][j] == 0){
for (int k = 0; k < matrix.size(); k++){
res[k][j] = 0; //列置0
}
for (int t = 0; t < matrix[0].size(); t++){
res[i][t] = 0; //行置0
}
}
}
}
matrix = res;
}
};
int main(){
vector<vector<int>> matrix = {{0,1,2,0},{3,4,5,2},{1,3,1,5}};
Solution s;
s.setZeroes(matrix);
for (int i = 0; i < matrix.size(); i++){
for (int j = 0; j < matrix[0].size(); j++){
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}