美文网首页
面试题 01.08. 零矩阵(难度:中等)

面试题 01.08. 零矩阵(难度:中等)

作者: 一直流浪 | 来源:发表于2023-06-26 15:11 被阅读0次

    题目链接:https://leetcode.cn/problems/zero-matrix-lcci/

    题目描述:

    编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

    示例 1:

    输入:
    [
      [1,1,1],
      [1,0,1],
      [1,1,1]
    ]
    输出:
    [
      [1,0,1],
      [0,0,0],
      [1,0,1]
    ]
    

    示例 2:

    输入:
    [
      [0,1,2,0],
      [3,4,5,2],
      [1,3,1,5]
    ]
    输出:
    [
      [0,0,0,0],
      [0,4,5,0],
      [0,3,1,0]
    ]
    

    解法:

    我们可以使用两个set集合row和col来分别统计存在0的行和列。遍历二维数组matrix,当元素为0时,就在row和col中添加所在的行和列。

    再次遍历二维数组,若元素所在行或者列出现在row和col中,则将元素置为0。

    代码:

    class Solution {
        public void setZeroes(int[][] matrix) {
            Set<Integer> row = new HashSet<>();
            Set<Integer> col = new HashSet<>();    
    
            for(int i = 0;i<matrix.length;i++) {
                for(int j=0;j<matrix[i].length;j++) {
                    if(matrix[i][j] == 0) {
                        row.add(i);
                        col.add(j);
                    }
                }
            }
    
            for(int i = 0;i<matrix.length;i++) {
                for(int j=0;j<matrix[i].length;j++) {
                    if(row.contains(i) || col.contains(j)) {
                        matrix[i][j] = 0;
                    }
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:面试题 01.08. 零矩阵(难度:中等)

          本文链接:https://www.haomeiwen.com/subject/tkydartx.html