矩阵置零

问题陈述

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用**原地算法。**

代码实现

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 setZero(int[][] matrix){
int R=matrix.length;
int C=matrix[0].length;
Set<Integer> row=new HashSet<Integer>();
Set<Integer> col=new HashSet<Integer>();
//遍历原始矩阵,找到值为0的行标和列标。并存储起来。
for(int i=0;i<R;i++){
for(int j=0;j<C;j++){
if(matrix[i][j]==0){
row.add(i);
col.add(j);
}
}
}
//迭代原始矩阵,对于每个格子检查行 r 和列 c 是否在相应set中,如果是就将矩阵格子的值设为 0。
for(int i=0;i<R;i++){
for(int j=0;j<C;j++){
if(row.contains(i)||col.contains(j)){
matrix[i][j]=0;
}
}
}
}
}