news 2026/2/4 2:36:17

73. 矩阵置零

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
73. 矩阵置零

73. 矩阵置零

已解答

中等

提示

给定一个mxn的矩阵,如果一个元素为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]]

提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -231 <= matrix[i][j] <= 231 - 1

📝 核心笔记:矩阵置零 (标记数组法)

1. 核心思想 (一句话总结)

“先记账,后清算”。

不能遍历到一个 0 就立刻把整行整列变 0(因为这会污染后续的遍历,导致全变成 0)。

必须先用两个辅助数组把“哪些行、哪些列坏了”记录下来,最后统一执行死刑。

2. 算法流程 (两遍扫描)
  1. 第一遍 (记录):遍历矩阵,只要发现matrix[i][j] == 0,就在小本本上记下:row[i] = truecol[j] = true
  2. 第二遍 (执行):再次遍历矩阵,只要当前格子所在的被记过,就将该格设为 0。

🔍 代码回忆清单 (带注释版)

// 题目:LC 73. 矩阵置零 class Solution { public void setZeroes(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; // 关键点1:空间复杂度 O(m+n) 的辅助数组 boolean[] rowHasZero = new boolean[m]; boolean[] colHasZero = new boolean[n]; // 阶段一:扫描并标记 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (matrix[i][j] == 0) { rowHasZero[i] = true; // 标记第 i 行要死 colHasZero[j] = true; // 标记第 j 列要死 } } } // 阶段二:根据标记置零 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // 关键点2:是“或”的关系。只要占一条,就得变0 if (rowHasZero[i] || colHasZero[j]) { matrix[i][j] = 0; } } } } }

⚡ 快速复习 CheckList (易错点)

  • [ ]为什么不能一边遍历一边置零?
    • 因为如果把matrix[i][j]变成 0,下一步遍历到它时,会被误认为是原始的 0,导致把不该置零的行/列也置零了(类似病毒扩散)。必须状态分离
  • [ ]空间复杂度是多少?
    • $O(m + n)$。使用了两个 boolean 数组。
  • [ ]逻辑关系?
    • 第二步判断时是row[i] || col[j](只要有一头是0,这个交叉点就是0)。

🚀 进阶提示 (面试高频追问)

你当前的代码是标准解法 ($O(m+n)$ 空间)。

面试官有 90% 的概率 会追问:“能把空间优化到 $O(1)$ 吗?”

$O(1)$思路回顾:

  • 不创建新数组,直接利用矩阵的第一行第一列来代替rowHasZerocolHasZero数组。
  • 但要额外用两个变量记录“第一行本身有没有0”和“第一列本身有没有0”,防止第一行/列被内部数据污染。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 12:29:05

FOTA升级进阶指南:文件系统直接升级+串口分段升级

FOTA&#xff08;Firmware Over-The-Air&#xff09;是固件远程升级的简称&#xff0c;用于设备固件的远程更新和维护。 主要优势包括&#xff1a; 远程维护&#xff1a; 无需现场操作即可完成设备固件更新&#xff1b; 故障修复&#xff1a; 快速修复已部署设备的软件缺陷&a…

作者头像 李华
网站建设 2026/2/2 18:28:29

2026年EOR名义雇主服务优势TOP8对比榜单,助力全球化布局与用工优化

在全球化背景下&#xff0c;EOR名义雇主服务为企业提供了独特的优势。这种模式使得企业能够灵活雇佣和管理海外员工&#xff0c;快速适应各国的法律要求。通过EOR名义雇主&#xff0c;企业不仅减少了合规风险&#xff0c;还能够高效地处理薪资、福利和税务等问题。与此同时&…

作者头像 李华
网站建设 2026/2/3 22:56:21

DEX的暗黑森林:5个技术陷阱如何吞噬你的百万美元开发预算

引言&#xff1a;DEX的狂欢与代价2025年&#xff0c;全球去中心化交易所&#xff08;DEX&#xff09;日均交易量突破120亿美元&#xff0c;Uniswap、dYdX等头部平台占据加密货币交易37%的市场份额。在这场去中心化金融&#xff08;DeFi&#xff09;的盛宴中&#xff0c;每天有超…

作者头像 李华
网站建设 2026/2/2 4:11:59

JavaScript 原生 sort() 方法详解

JavaScript 原生 sort() 方法详解一、基本语法javascript// 语法 arr.sort([compareFunction])// 返回值&#xff1a;排序后的原数组&#xff08;原地修改&#xff09; const sortedArray arr.sort(compareFunction);二、默认行为&#xff08;不使用比较函数&#xff09;1. 字…

作者头像 李华
网站建设 2026/2/3 17:36:56

OE 平台是什么?基于多来源数字内容管理需求形成的海外工具型平台

OE 平台通常被归纳为一类海外数字内容管理工具&#xff0c;其形成背景并非单一业务需求&#xff0c;而是源于数字内容在不同平台、不同模块中不断分散后所产生的集中管理需求。从平台属性来看&#xff0c;OE 更接近于信息与内容的管理层工具&#xff0c;而非具体功能或服务平台…

作者头像 李华
网站建设 2026/2/3 11:55:50

LobeChat能否绘制思维导图?结构化思考好伙伴

LobeChat能否绘制思维导图&#xff1f;结构化思考好伙伴 在知识爆炸的时代&#xff0c;我们每天都在处理海量信息——会议纪要、读书笔记、项目规划……但真正能被内化和复用的却少之又少。一个核心问题在于&#xff1a;人类擅长线性表达&#xff0c;却不善结构化组织。于是&a…

作者头像 李华