【数组】零矩阵
题目描述:
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例:
输入: [[1,1,1],[1,0,1],[1,1,1]]
输出: [[1,0,1],[0,0,0],[1,0,1]]
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
class Solution
{
public:
// 标记数组
void setZeroes(vector<vector<int>>& matrix) {
int row = matrix.size();
int col = matrix[0].size();
unordered_set<int>zero_row,zero_col;
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
if(matrix[i][j] == 0){
zero_row.insert(i);
zero_col.insert(j);
}
}
}
for(auto i:zero_row){
for(int j=0; j<col; j++){
matrix[i][j] = 0;
}
}
for(auto i:zero_col){
for(int j=0; j<row; j++){
matrix[j][i] = 0;
}
}
}
};
int main()
{
vector<vector<int>> arr = { {5, 0, 9,11},{2, 4, 8,10},{13, 3, 6, 7},{15,14,12,16} };
Solution solution;
solution.setZeroes(arr);
int len = arr.size();
for(int i=0; i<len; i++){
for(int j=0; j<len; j++){
cout << arr[i][j] << ' ';
}
}
return 0;
}