Leetcode 73 矩阵置零

题目信息

LeetCode地址: . - 力扣(LeetCode)

题目理解

矩阵是m*n的,如果某个元素(i,j)等于0,则将第i行和第j列的所有元素都置零。既然如此,我们可以便利每一个元素,并记录下哪一行哪一列有零。记录完毕后,重新遍历整个矩阵,如果其所在行或者所在列存在零,则置为零。

所以问题变成了,在哪里保存这些信息: 哪一行哪一列有零

我们可以通过一个m长和n长的数组来保存这些信息,这会产生O(m+n)的额外空间复杂度。

我们也可以把这些信息直接保存在矩阵的第一列和第一行!代价是我们要提前遍历第一行和第一列,检查其是否存在零,如果是,最后我们需要把第一列或者第一行的所有元素都置零。

O(m+n)额外空间复杂度写法

public void setZeroes(int[][] matrix) {
        int[] row = new int[matrix.length];
        int[] col = new int[matrix[0].length];
        for (int i = 0; i<matrix.length; i++) {
            for (int j = 0; j<matrix[0].length; j++) {
                if (matrix[i][j] == 0) {
                    row[i] = 1;
                    col[j] = 1; 
                }
            }
        }
        for (int i = 0; i<matrix.length; i++) {
            for (int j = 0; j<matrix[0].length; j++) {
                if (row[i] == 1 || col[j] == 1) {
                    matrix[i][j] = 0;
                }
            }
        }
    }

O(1)额外空间复杂度写法

public void setZeroes(int[][] matrix) {
        boolean firstRow = false;
        boolean firstCol = false;
        for (int i = 0; i<matrix.length; i++) {
            if (matrix[i][0] == 0) {
                firstCol = true;
                break;
            }
        }
        for (int j = 0; j<matrix[0].length; j++) {
            if (matrix[0][j] == 0) {
                firstRow = true;
                break;
            }
        }
        for (int i=1;i < matrix.length; i++) {
            for (int j = 1; j<matrix[0].length; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        for (int i =1; i<matrix.length; i++) {
            for (int j = 1; j<matrix[0].length; j++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
        }
        if (firstCol) {
            for (int i =0; i<matrix.length; i++) {
                matrix[i][0] = 0;
            } 
        }
        if (firstRow) {
            for (int i =0; i<matrix[0].length; i++) {
                matrix[0][i] = 0;
            } 
        }
    }

相关推荐

  1. Leetcode 73 矩阵

    2024-04-02 08:12:07       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 08:12:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 08:12:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 08:12:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 08:12:07       20 阅读

热门阅读

  1. 快速学习使用Spring MVC的注解及三层架构

    2024-04-02 08:12:07       18 阅读
  2. 【pytest】fixture机制

    2024-04-02 08:12:07       13 阅读
  3. 2024.4.1

    2024-04-02 08:12:07       16 阅读
  4. R语言处理nc数据

    2024-04-02 08:12:07       14 阅读
  5. MongoDB聚合运算符:$log10

    2024-04-02 08:12:07       16 阅读
  6. C# 中 == 和 Equals 的区别

    2024-04-02 08:12:07       15 阅读
  7. https

    https

    2024-04-02 08:12:07      15 阅读
  8. C# 异步问答集

    2024-04-02 08:12:07       14 阅读
  9. CRC循环冗余校验码算法计算

    2024-04-02 08:12:07       18 阅读
  10. 深度学习八股文

    2024-04-02 08:12:07       16 阅读