leetcode.矩阵.73矩阵置零-Java
1. 具体题目
给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例 1:
输入: 输出:
[ [
[1,1,1], [1,0,1],
[1,0,1], [0,0,0],
[1,1,1] [1,0,1]
] ]
2. 思路分析
先遍历原矩阵,找出所有值为 0 的元素,记录其行列的值,分别存入对应的 HashSet 中,之后遍历两个HashSet,将记录下来的行和列分别置零。
3. 代码
1 public void setZeroes(int[][] matrix) { 2 HashSet<Integer> rows = new HashSet<>(); 3 HashSet<Integer> cols = new HashSet<>(); 4 for(int i = 0; i < matrix.length; i++){ 5 for(int j = 0; j < matrix[0].length; j++){ 6 if(matrix[i][j] == 0){ 7 rows.add(i); 8 cols.add(j); 9 } 10 } 11 } 12 for(int row : rows){ 13 for(int col = 0; col < matrix[0].length; col++){ 14 matrix[row][col] = 0; 15 } 16 } 17 for(int col : cols){ 18 for(int row = 0; row < matrix.length; row++){ 19 matrix[row][col] = 0; 20 } 21 } 22 }
4. 思路优化
上述题解中,使用了额外的空间O(n + m),对于空间进行优化,可以在遍历数组找 0 元素时,若找到则将其所在的行首和列首分别置0,之后再通过标志位进行置零操作。

浙公网安备 33010602011771号