矩阵#中等#矩阵置零
矩阵#中等#矩阵置零
前文
给定一个m x n
的矩阵,如果一个元素为0
,则将其所在行和列的所有元素都设为0
。请使用原地算法。
1
2
3
4
5
6
7
示例1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
示例2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
正文
1
2
3
4
5
6
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
}
};
解法1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
// matrix[1][2] = 100;
set<int> row, col;
for(int i = 0; i < matrix.size(); ++i) {
for(int j = 0; j < matrix[i].size(); ++j) {
if (matrix[i][j] == 0) {
row.insert(i);
col.insert(j);
}
}
}
for(int i = 0; i < matrix.size(); ++i) {
for(int j = 0; j < matrix[i].size(); ++j) {
if (row.count(i) || col.count(j))
matrix[i][j] = 0;
}
}
}
};
只要元素为0
则所在行列元素都为0
,一个简单的思路是先记录需要被置零的行和列,当然不要重复, 选择set容器记录行和列,最后一起处理,记录后再遍历一遍,如果元素的行列符合则置零即可。 时间复杂度两次循环两个O(n^2),为O(n^2)
本文由作者按照 CC BY 4.0 进行授权