Leetcode: 73. 矩阵置零

【力扣题解 Day 9】73. 矩阵置零 力扣算法打卡记录 阅读详情

题目

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 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]
]


进阶:

一个直接的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。
你能想出一个常数空间的解决方案吗?

分析

先考虑 O(m + n) 额外空间的方法:因为一行/列中只要有一个是 0,那么这一行/列都是0。可以建立长度 m + n 的数组记录该行/该列是否有 0,然后统一赋值即可。

接下来考虑 O(1) 额外空间的方法:可以用 matrix[i][0], matrix[0][j] 记录行和列中是否含有 0。现在只需要遍历从 matrix[1][1] 开始的元素。如果 matrix[i][j] == 0, 那么将 matrix[i][0], matrix[0][j] 都置为 0。最后再统一赋值即可,这样就完成了从 matrix[1][1] 开始的所有元素的赋值。

但是还有一个细节需要关注:完成上述步骤后,还需要处理  matrix[i][0], matrix[0][j] 本身为 0 的情况。所以先用两个布尔型变量记录。最后再进行赋值。

代码

class Solution {
    public void setZeroes(int[][] matrix) {
        if (matrix == null || matrix.length == 0) return;
        if (matrix[0] == null || matrix[0].length == 0) return;
        
        int rows = matrix.length, cols = matrix[0].length;
        boolean rowFlag = false, colFlag = false;
        for (int j = 0; j < cols; j++) {
            if (matrix[0][j] == 0) {
                colFlag = true;
                break;
            }
        }
        for (int i = 0; i < rows; i++) {
            if (matrix[i][0] == 0) {
                rowFlag = true;
                break;
            }
        }
        for (int i = 1; i < rows; i++) {
            for (int j = 1; j < cols; j++) {
                if (matrix[i][j] == 0) {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        for (int i = 1; i < rows; i++) {
            for (int j = 1; j < cols; j++) {
                if (matrix[i][0] == 0 || matrix[0][j] == 0) {
                    matrix[i][j] = 0;
                }
            }
        }
        if (rowFlag) {
            for (int i = 0; i < rows; i++) matrix[i][0] = 0;
        }
        if (colFlag) {
            for (int j = 0; j < cols; j++) matrix[0][j] = 0;
        }
    }
}

 

Leetcode 73:矩阵置零(最详细的解法!!!) 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 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] ] 输... 阅读详情

相关推荐

【中等】力扣算法题解析LeetCode73:矩阵置零

本文介绍了一种原地算法,用于将矩阵中零元素所在的行和列全部置零。通过复用矩阵的首行和首列作为标记空间,结合两个额外变量记录首行首列自身的零元素状态,实现了O(1)空间复杂度。算法分为标记阶段和置零阶段:先标记需要置零的行列,再根据标记进行置零操作,最后处理首行首列。这种方法避免了标记覆盖问题,确保了正确性。代码实现展示了详细的处理逻辑,时间复杂度为O(mn),空间复杂度为O(1)。

ylumwd的博客 987

LeetCode73-矩阵置零

LeetCode73-矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 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], [...

lyd1995的博客 690

飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录

本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。

weixin_33724046的博客 313

LeetCode第73题_矩阵置零

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

qq_40263592的博客 1490

深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系

训练整个数据集是epoch、把数据集分为多少小块就是batch,每个小块(batch)多少个数据就是batch_size,整个数据集需要训练多少轮是iteration

qq_42740834的博客 1610

基于FLUENT的圆柱绕流数值模拟与流场优化策略

本文详细介绍了基于FLUENT的圆柱绕流数值模拟方法与流场优化策略。从基础概念、建模技巧到湍流模型选择,全面解析了圆柱绕流模拟的关键技术,并提供了实用的网格划分和参数设置建议。通过具体案例展示了流动控制方法和优化流程,帮助工程师有效降低阻力系数,提升流场性能。

f6g7h8i9j的博客 705

73. 矩阵置零 - 力扣(LeetCode)

如果 i 在 row 集合中(即 i == 0 或 i == 2),或者 j 在 col 集合中(即 j == 1 或 j == 2),则将该元素置零。输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]输入:matrix = [[1,1,1],[1,0,1],[1,1,1]][4, 0, 0], # 第 1 行的第 1 和第 2 列被置零。输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]输出:[[1,0,1],[0,0,0],[1,0,1]]

q1111111da的博客 536

绕过Cloudflare的两种简便方案

绕过Cloudflare的两种简便方案

自成背后的博客 1万+

LeetCode 力扣 73. 矩阵置零

题目描述(中等难度) 给定一个矩阵,然后找到所有含有 0 的地方,把该位置所在行所在列的元素全部变成 0。 解法一 暴力解法,用一个等大的空间把给定的矩阵存起来,然后遍历这个矩阵,遇到 0 就把原矩阵的当前行,当前列全部变作 0,然后继续遍历。 public void setZeroes(int[][] matrix) { int row = matrix.length; int...

wind_liang的博客 984

【华为OD机试】创建二叉树(python, java, c++, js)

请按下列描达构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为i 的子节点: 若node 无「左子节点」。则添加左子节点; 若node 有「左子节点」但无「右子节点」,则添加右子节点: 否则不作任何处理。 height、index 均从0开始计数;index 指所在层的创建顺序。

A_D_I_D_A_S的博客 188

第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

🥏第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

【LeetCode-73.矩阵置零】

难度:中。

Hermione_pudding的博客 585

手把手教你RK3568 MIPI屏驱动适配,纯干货!

RK3568 作为一款高性能的多媒体处理器,在嵌入式领域中备受瞩目。它采用了先进的 22nm 制程工艺,搭载四核 Cortex-A55 处理器,这种架构为芯片提供了高效的功耗比,使其在运行各种复杂任务时,既能保证性能,又能有效控制功耗。在实际应用中,无论是多任务处理还是运行大型应用程序,RK3568 都能凭借其四核 Cortex-A55 处理器,实现流畅的操作体验,满足智能设备对高性能和低功耗的需求。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4069

LeetCode 73. 矩阵置零——每日一题

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

晴空๓ 2285

2025华为杯第二十二届中国研究生数学建模竞赛D题:低空湍流监测及最优航路规划 - 完整解题分析+完整MATLAB源码!(下篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1622

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

力扣(LeetCode)100题:73.矩阵置零 54.螺旋矩阵

本文包含两个矩阵操作算法:矩阵置零和螺旋遍历。矩阵置零算法分两步:首先扫描矩阵记录含0的行列,然后根据记录将对应行列置零。螺旋遍历算法采用按层模拟方法,通过维护四个边界变量(上、下、左、右)依次沿四个方向遍历矩阵元素,每次完成一个方向后收缩对应边界并检查是否越界,确保遍历路径呈现螺旋状。两个算法都采用原地修改和边界控制策略,时间复杂度均为O(mn)。

sweet_ran的博客 399

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Leetcode73. 矩阵置零

则将其所在行和列的所有元素都设为。希望自己可以坚持下去。方法--天涯明月 共勉。的矩阵,如果一个元素为。

GQ_666的博客 1000

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

73. 矩阵置零【 力扣(LeetCode) 】

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

yyh520025的博客 754

LeetCode 73 矩阵置零

LeetCode 73 矩阵置零

qq_43745578的博客 983

LeetCode 73矩阵置零

LeetCode 73矩阵置零 题目简述:给定一个 m x n的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。 示例: 输入: 输出: [ [ [1,1,1], [1,0,1], [1,0,1], [0,0,0], [1,1,1] [1,0,1] ] ] 思路一:利用额外空间存储为0的坐标,根据X Y坐标

XBlog 196

leetcode 73.矩阵置零

为什么不能边遍历边改?如果在遍历到时立刻把第i行全改成 0,那么当你遍历到该行后面的元素时,会误以为它们原本就是 0,从而导致错误的连锁反应(整个矩阵可能全变 0)。方案二的执行顺序为什么这么重要?先检查首行首列:防止标记覆盖原始信息。中间先标记后清洗:利用首行首列记录信息,然后清洗内部数据。最后处理首行首列:如果在清洗内部数据之前就先把首行首列清零了,那么内部数据在判断时就会全部命中,导致错误。面试回答策略“首先,我们可以用两个数组来记录行和列的状态,这样逻辑很清晰,时间复杂度OMN。

2403_86950176的博客 379

leetcode73-矩阵置零

leetcode73-矩阵置零

weixin_45799371的博客 668

LeetCode第73题:矩阵置零(中等)

LeetCode第73题:矩阵置零(中等) 题目:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 解题思路:遍历数组,记录为0的位置坐标。根据坐标依次将行、列变为0。 class Solution { public void setZeroes(int[][] matrix) { //数组的行和列 ...

new_whiter的博客 299

leetcode73.矩阵置零

第二次循环遍历除了0行0列元素,在置零行|列元素置零,注意先不动0行0列元素;根据第0行|第0列是否有0标记,对第0行元素进行修改。思路:直接上进阶解法思路——仅使用常量空间解决方案。第一次循环遍历,记录置零的行号和列号。,则将其所在行和列的所有元素都设为。(0行 0列用来记录置零行列位置)的矩阵,如果一个元素为。

m0_64995001的博客 275

【力扣hot100】【Leetcode 73】矩阵置零|数组遍历 算法笔记及打卡(20/100)

本文介绍了LeetCode第73题"矩阵置零"的解法。题目要求将矩阵中所有0元素所在的行和列全部置为0,并要求使用原地算法。参考解法使用两个数组分别记录0元素的行号和列号,然后统一将这些行和列置零。文章提供了C++实现代码,包括核心解题逻辑和完整的输入输出示例。解法的时间复杂度为O(mn),空间复杂度为O(m+n),适用于中等规模矩阵的处理。

打破知识壁垒 204
上一篇: Leetcode: 43. 字符串相乘
下一篇: Leetcode: 3. 无重复字符的最长子串
starflyyy
博客等级 码龄8年 32粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值