算法练习题16——leetcode73矩阵置零

题目描述

给定一个 mxn 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0

解题思路

我们需要找出矩阵中哪些位置有 0,然后将这些位置所在的行和列上的所有元素都设为 0

可以分为以下几个步骤:

  1. 扫描矩阵 :遍历整个矩阵,当我们遇到 0 时,将该元素所在的行和列标记起来,表示这些行和列需要被置为 0。为了实现这一点,我们可以用两个辅助数组,分别记录哪些行和哪些列需要置零。
  2. 标记置零 :根据第 1 步中记录的行和列信息,再次遍历矩阵,如果当前元素位于需要置零的行或者列中,则将该元素置为 0

代码

class Solution {
    public void setZeroes(int[][] matrix) {
        // 获取矩阵的行数 m 和列数 n
        int m = matrix.length;
        int n = matrix[0].length;
        
        // 创建两个布尔数组分别标记需要置零的行和列
        boolean[] row = new boolean[m];  // row[i] 为 true 表示第 i 行需要置零
        boolean[] col = new boolean[n];  // col[j] 为 true 表示第 j 列需要置零
        
        // 第一遍扫描矩阵,标记哪些行和列需要置零
        for (int i = 0; i < m; i++) {  // 遍历每一行
            for (int j = 0; j < n; j++) {  // 遍历每一列
                if (matrix[i][j] == 0) {  // 如果矩阵的当前元素是 0
                    // 标记当前行和列需要置零
                    row[i] = true;  // 第 i 行需要置零
                    col[j] = true;  // 第 j 列需要置零
                }
            }
        }
        
        // 第二遍扫描矩阵,进行置零操作
        for (int i = 0; i < m; i++) {  // 遍历每一行
            for (int j = 0; j < n; j++) {  // 遍历每一列
                // 如果当前行或者列被标记需要置零,则将当前元素设为 0
                if (row[i] || col[j]) {  
                    matrix[i][j] = 0;  // 置零操作
                }
            }
        }
    }
}

解题思路详细描述

  1. 辅助数组记录零元素位置 :我们创建两个布尔数组 rowcol,分别记录每一行和每一列是否包含 0 元素。如果 row[i] == true,表示第 i 行包含 0;如果 col[j] == true,表示第 j 列包含 0

  2. 扫描矩阵,标记需要置零的行和列 :我们遍历整个矩阵,找到所有值为 0 的元素,然后记录下这些元素所在的行和列。具体做法是当 matrix[i][j] == 0 时,将 row[i]col[j] 设为 true,以标记第 i 行和第 j 列需要置零。

  3. 再次扫描矩阵,执行置零操作 :根据 rowcol 数组的标记,第二次遍历矩阵。当遍历到 matrix[i][j] 时,如果 row[i]col[j]true,就将 matrix[i][j] 设为 0

相关推荐
吾日三省吾码19 分钟前
JVM 性能调优
java
LNTON羚通1 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
弗拉唐1 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi772 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
少说多做3432 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀2 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
哭泣的眼泪4082 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
清炒孔心菜2 小时前
每日一题 LCR 078. 合并 K 个升序链表
leetcode
蓝黑20203 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea