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,之后再通过标志位进行置零操作。

posted @ 2019-11-22 21:13  les111ley  阅读(234)  评论(0)    收藏  举报