一.题目
给定一个 m x n
的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 。
示例 1:
输入: matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出: [[1,0,1],[0,0,0],[1,0,1]]
二.解析
这道题的关键其实就是可能有多个重复的置换零,所以要用col和row去存取,同时还得不重复,所以采用了Set集合。两层循环也是要注意,外层一定是要置零的行(列),然后内层是要遍历的列(行),代码如下:
class Solution {
public void setZeroes(int[][] matrix) {
int n = matrix.length;
int m = matrix[0].length;
Set<Integer> col = new HashSet<>();
Set<Integer> row = new HashSet<>();
for(int i = 0;i < n;i ++) {
for(int j = 0;j < m;j ++) {
if(matrix[i][j] == 0) {
row.add(i);
col.add(j);
}
}
}
for(Integer i : row) {
for(int j = 0;j < m;j ++) {
matrix[i][j] = 0;
}
}
for(Integer j : col) {
for(int i = 0;i < n;i ++) {
matrix[i][j] = 0;
}
}
}
}