思路
使用标记集合
很简单的一个想法:遍历矩阵,记录每个遇到的0
所在的行下标、列下标,遍历结束后将所记录的行列元素全部置0
即可。
代码如下:
class Solution {
public void setZeroes(int[][] matrix) {
Set<Integer> rows = new HashSet<>();
Set<Integer> cols = new HashSet<>();
int m = matrix.length, n = matrix[0].length;
for(int i=0; i<m; i++){
for(int j= 0; j<n; j++){
if(matrix[i][j] == 0){
rows.add(i);
cols.add(j);
}
}
}
for (Integer row : rows){
Arrays.fill(matrix[row], 0);
}
for (Integer col : cols){
for(int i=0; i<m; i++){
matrix[i][col] = 0;
}
}
}
}
空间复杂度为
O(m+n)
,两个集合的长度
可以优化为O(1)
: