LeetCode热题100--73.矩阵置零--中等

1. 题目

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]

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

示例 2:

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

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

2. 题解

java 复制代码
class Solution {
    public void setZeroes(int[][] matrix) {
        int n = matrix.length;
        int m = matrix[0].length;
        boolean[] zeroInRow = new boolean[n];
        boolean[] zeroInLine = new boolean[m];
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                if(matrix[i][j] == 0){
                    zeroInRow[i] = true;
                    zeroInLine[j] = true;
                }
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                if(zeroInRow[i] || zeroInLine[j]){
                    matrix[i][j] = 0;
                }
    }
}

3. 解析

官方题解:矩阵置零

  1. class Solution {public void setZeroes(int[][] matrix)
    这定义了一个名为"Solution"的新类,并声明了setZeroes()方法来处理这个任务。
  2. int n = matrix.length;
    int m = matrix[0].length;
    boolean[] zeroInRow = new boolean[n];
    boolean[] zeroInLine = new boolean[m];
    这初始化了一些变量,用于存储行和列的信息。zeroInRow是一个布尔数组,如果对应行的元素为零,则它在该索引位置上将被设置为true。同样地,zeroInLine是一个布尔数组,表示相应列是否包含零。
  3. for(int i = 0; i < n; i++)
    for(int j = 0; j < m; j++)
    if(matrix[i][j] == 0){
    zeroInRow[i] = true;
    zeroInLine[j] = true;
    }
    这两个嵌套循环遍历整个矩阵。如果找到一个零元素,则将相应的zeroInRow[i]和zeroInLine[j]设置为true。
  4. for(int i = 0; i < n; i++)
    for(int j = 0; j < m; j++)
    if(zeroInRow[i] || zeroInLine[j]){
    matrix[i][j] = 0;
    }
    这两个嵌套循环遍历整个矩阵。如果对应的zeroInRow[i]或zeroInLine[j]为true,则将该位置上的元素设置为零。
相关推荐
汤永红5 分钟前
week1-[顺序结构]大海
c++·算法·信睡奥赛
博哥爱吃肉37 分钟前
第2篇_Go语言基础语法_变量常量与数据类型
开发语言·算法·golang
Xの哲學4 小时前
TCP 连接管理:深入分析四次握手与三次挥手
网络·网络协议·算法
华清远见成都中心6 小时前
基于深度学习的异常检测算法在时间序列数据中的应用
人工智能·深度学习·算法
এ᭄画画的北北8 小时前
力扣-347.前K个高频元素
算法·leetcode
月殇_木言10 小时前
算法基础 第3章 数据结构
数据结构·算法
亮亮爱刷题11 小时前
算法提升之树上问题-(LCA)
数据结构·算法·leetcode·深度优先
火车叨位去194911 小时前
力扣top100(day03-01)--二叉树 03
算法·leetcode·职场和发展
岁忧11 小时前
(LeetCode 每日一题) 1780. 判断一个数字是否可以表示成三的幂的和 (数学、三进制数)
java·c++·算法·leetcode·职场和发展·go
浩少70212 小时前
LeetCode-16day:栈
java·数据结构·算法