矩阵置零:用首行首列做标记实现原地 O(1) 空间(LeetCode 73)

副标题 / 摘要 “矩阵置零”是典型的二维标记传播问题:某个位置为 0,会影响整行整列。本文用 ACERS 结构讲清楚为什么不能直接改、如何用首行首列做标记实现原地 O(1) 额外空间,并给出多语言可运行代码。 预计阅读时长:12~15 分钟 标签:矩阵、原地算法、标记位 SEO 关键词:矩阵置零, 原地 O(1) 空间, 首行首列标记, LeetCode 73 元描述:用首行首列作标记位,原地将含 0 的行与列全部置零;包含推导、复杂度对比、工程迁移与多语言实现。 目标读者 刷 LeetCode,想把“二维数组原地技巧”沉淀成稳定模板的同学 需要在工程里做二维网格/表格/矩阵数据清洗与传播标记的开发者 对空间优化敏感(嵌入式、性能场景、内存受限)的工程师 背景 / 动机 二维数据在工程里到处都是:表格、图像、传感器网格、关联矩阵…… “某个单元格触发规则 -> 影响整行整列”这种联动,本质就是 行列传播(row/col propagation)。 这题额外要求“原地”,逼你掌握一个非常通用的技巧:用数据结构本身的某些位置当作标记位,避免额外内存。 核心概念 传播标记:发现 0 后,不是立刻改整行整列,而是先记录“哪些行/列要被清零” 原地(in-place):只允许 O(1) 额外空间(不算输入矩阵本身) 标记位复用:把 matrix[0][j] 当作“第 j 列要清零”的标记,把 matrix[i][0] 当作“第 i 行要清零”的标记 首行/首列特判:首行/首列既是数据又是标记位,因此需要单独用两个布尔量记录它们是否本来就该清零 A — Algorithm(题目与算法) 题目还原 给定一个 m x n 矩阵 matrix:如果某个元素为 0,则将该元素所在的 整行 与 整列 的所有元素都设置为 0。 要求 原地修改 matrix(通常不需要返回值)。 ...

2026年2月1日 · 10 分钟 · map[name:Jeanphilo]