首页/新闻资讯/正文详情

原地算法实现矩阵置零:LeetCode 73题解析

发布时间:2026/11/14 5:25:24 来源:云帆数科 栏目:资讯中心
原地算法实现矩阵置零:LeetCode 73题解析
1. 问题背景与需求分析矩阵置零问题是LeetCode上经典的数组操作题目编号73题。题目要求我们处理一个m×n的矩阵当某个元素为0时需要将其所在行和列的所有元素都置为0。这个问题的难点在于要求使用原地算法in-place algorithm完成操作即不能使用额外的O(m×n)空间来存储矩阵副本。在实际开发中类似场景经常出现在图像处理领域。比如当我们需要对一张图片进行特殊处理时遇到纯黑像素点RGB值为0,0,0就需要将该像素所在行和列都变为纯黑。这种操作在图像滤镜、数据清洗等场景都有应用。提示原地算法意味着我们只能使用常数级别的额外空间O(1)不能直接复制整个矩阵。这是本题的核心挑战。2. 暴力解法与空间优化思路最直观的解法是首先遍历矩阵记录下所有0元素所在的行和列然后再进行置零操作。这种方法需要O(mn)的额外空间来存储标记信息def setZeroes(matrix): rows set() cols set() m, n len(matrix), len(matrix[0]) # 第一次遍历记录0的位置 for i in range(m): for j in range(n): if matrix[i][j] 0: rows.add(i) cols.add(j) # 第二次遍历进行置零操作 for i in range(m): for j in range(n): if i in rows or j in cols: matrix[i][j] 0这种方法虽然简单易懂但使用了额外的集合来存储行和列信息不完全符合原地算法的要求。我们需要寻找更优的空间优化方案。3. 原地算法实现方案真正的原地算法应该利用矩阵本身来存储标记信息。具体思路是使用矩阵的第一行和第一列来记录该行/列是否需要置零需要额外两个变量记录第一行和第一列本身是否需要置零实现步骤def setZeroes(matrix): m, n len(matrix), len(matrix[0]) first_row_has_zero any(matrix[0][j] 0 for j in range(n)) first_col_has_zero any(matrix[i][0] 0 for i in range(m)) # 使用第一行和第一列作为标记空间 for i in range(1, m): for j in range(1, n): if matrix[i][j] 0: matrix[i][0] 0 matrix[0][j] 0 # 根据标记置零 for i in range(1, m): for j in range(1, n): if matrix[i][0] 0 or matrix[0][j] 0: matrix[i][j] 0 # 处理第一行和第一列 if first_row_has_zero: for j in range(n): matrix[0][j] 0 if first_col_has_zero: for i in range(m): matrix[i][0] 0这个算法的时间复杂度是O(m×n)空间复杂度是O(1)完全符合题目要求。关键在于巧妙地利用矩阵自身的空间来存储标记信息避免了额外的空间开销。4. 边界条件与测试用例在实际编码中有几个边界条件需要特别注意矩阵为空的情况虽然题目保证m,n≥1第一行或第一列本身包含0的情况矩阵中所有元素都为0的情况矩阵中没有0的情况完整的测试用例应该包括test_cases [ # 常规情况 ([[1,1,1],[1,0,1],[1,1,1]], [[1,0,1],[0,0,0],[1,0,1]]), # 第一行有0 ([[0,1,1],[1,1,1],[1,1,1]], [[0,0,0],[0,1,1],[0,1,1]]), # 第一列有0 ([[1,1,1],[0,1,1],[1,1,1]], [[0,1,1],[0,0,0],[0,1,1]]), # 全0矩阵 ([[0,0],[0,0]], [[0,0],[0,0]]), # 无0矩阵 ([[1,2],[3,4]], [[1,2],[3,4]]) ]5. 算法优化与变种思考对于这个问题我们还可以考虑一些优化和变种延迟置零法先标记需要置零的行列最后统一处理。这种方法可以减少重复置零操作。位图标记法如果语言支持可以用位运算来压缩标记空间。例如用一个整数表示哪些行需要置零每个bit代表一行。分块处理对于超大矩阵可以考虑分块处理减少缓存失效。并行处理在多核环境下可以将矩阵分片并行处理。在实际面试中面试官可能会追问如果矩阵非常大无法一次性装入内存怎么办这时就需要考虑外排序、分块加载等策略。6. 实际应用场景扩展矩阵置零算法虽然看似简单但其思想在很多实际场景中都有应用图像处理如前所述用于特殊滤镜效果实现数据清洗处理稀疏矩阵中的无效数据电子表格类似Excel中基于条件格式化整行/整列游戏开发棋盘类游戏中特殊格子的区域影响理解这个算法的核心在于掌握利用现有数据结构存储额外信息的思想这在很多系统设计问题中都非常有用。7. 常见错误与调试技巧在实现这个算法时容易犯的几个错误标记污染在标记阶段就修改了第一行/列的值导致后续标记错误解决方法先处理内部矩阵最后处理第一行/列循环边界错误错误地处理了矩阵边界解决方法明确区分标记阶段和置零阶段的循环范围空间计算错误误以为O(mn)空间符合原地算法要求解决方法理解原地算法严格限制常数空间调试时可以打印中间状态def print_matrix(matrix): for row in matrix: print(row) print()在关键步骤后插入打印语句观察矩阵变化过程。8. 不同语言实现注意事项虽然算法思想相同但不同语言实现时有各自需要注意的点C:注意vector的边界检查可以使用bitset来优化标记存储Java:注意数组越界异常考虑使用位掩码来存储标记JavaScript:注意矩阵是数组的数组可以使用TypedArray处理大型矩阵Go:注意切片的使用可以利用多返回值简化标记存储以Python为例我们还可以利用numpy库更高效地处理矩阵操作但在面试中通常不允许使用这类库。9. 复杂度分析与算法比较让我们对比几种解法的复杂度方法时间复杂度空间复杂度适用场景暴力法O(m×n)O(mn)简单场景空间不敏感原地标记法O(m×n)O(1)严格空间限制延迟置零法O(m×n)O(mn)减少写操作次数在大多数情况下原地标记法是最优选择因为它既满足了空间限制时间复杂度也没有增加。10. 面试技巧与回答策略当面试中被问到这个问题时可以按照以下步骤回答理解问题确认输入输出要求特别是空间限制提出暴力解先给出简单解法说明其不足优化思路解释如何利用矩阵本身存储标记处理边界讨论第一行/列的特殊情况编写代码实现完整解决方案测试验证用多个测试用例验证代码回答时可以这样说我首先想到的是用额外空间记录需要置零的行列但这样不符合原地算法的要求。于是考虑利用矩阵的第一行和第一列来存储这些标记但需要注意第一行和第一列本身的处理...11. 相关题目与进阶练习掌握这个问题后可以尝试解决以下相关题目289. 生命游戏更复杂的矩阵原地更新规则54. 螺旋矩阵矩阵遍历的不同方式48. 旋转图像矩阵的原地变换566. 重塑矩阵矩阵形状的原地调整这些题目都涉及到矩阵的原地操作可以帮助巩固相关技巧。12. 工程实践中的注意事项在实际工程中实现这类算法时还需要考虑大矩阵处理分块加载、处理并发安全多线程环境下的同步问题数值精度处理浮点数时的比较误差API设计是否应该修改原矩阵还是返回新矩阵例如在处理图像时可能需要这样设计APIdef zero_out_pixels(image: Image.Image) - Image.Image: 处理图像中的黑色像素点返回新图像 matrix image_to_matrix(image) setZeroes(matrix) return matrix_to_image(matrix)这样可以避免意外修改原始图像数据。

相关推荐

iBeacon广播帧与后台唤醒:31字节到GATT长连接实战
iBeacon广播帧与后台唤醒:31字节到GATT长连接实战

简介:这份压缩包面向需要实现 iBeacon 后台唤醒与蓝牙长连接的 iOS 开发者,围绕以单例方式封装 iBeacon 管理这一常见需求,给出可直接参考的实现代码。包内共 2 个文件,分别为 1 个 h 头文件与 1 个 m 实现文件,压缩包… · 2026/11/14 5:25:16

语音处理与神经网络实战:从信号前处理到模型部署的避坑指南
语音处理与神经网络实战:从信号前处理到模型部署的避坑指南

语音处理这个方向,我断断续续折腾了快三年,从最早拿开源工具跑频谱图,到后来自己搭神经网络做端到端的识别和增强,踩过的坑能写满一个笔记本。这次想聊的,是我在整理一套“语音处理 神经网络学习”相关笔记时沉淀下来… · 2026/11/2 14:19:09

VoiceStudio:从文本到成品的AI配音生产线,解决声音状态不稳与批量生产难题
VoiceStudio:从文本到成品的AI配音生产线,解决声音状态不稳与批量生产难题

做内容这几年,我有一个很深的体会:最贵的不是设备,不是时间,而是“声音状态”。今天状态好,一句台词录五遍就过;今天嗓子哑了、隔壁装修、楼下广场舞,一个三十秒的口播能磨两个小时。也正是因为… · 2026/11/14 3:31:04

广东考电工证哪里快考官方回应来了,工地太忙根本没时间复习考试
广东考电工证哪里快考官方回应来了,工地太忙根本没时间复习考试

广东考电工证哪里快考官方回应来了,工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。尤其是在广东这个施工工地密集、项目节奏快的地区,很多电工在考取证书前就感到时间紧迫,担心自己无法通过考试。 官方回应… · 2026/11/14 5:25:22

电工作业 职业禁忌证有效期多久
电工作业 职业禁忌证有效期多久

电工作业职业禁忌证含金量如何?外省证能转过来吗 之前考的证在外省能不能转过来?这几乎是每个准备从事电工作业的朋友最关心的问题。如果你手里握着一张电工作业职业禁忌证,但它是其他省份发的,那么你可能正在为“含金量”和“能否通用”这两个问题而烦恼… · 2026/11/14 5:25:22

电工证超期能否复审呢?良心建议帮你搞懂真相
电工证超期能否复审呢?良心建议帮你搞懂真相

电工证超期能否复审呢?良心建议帮你搞懂真相 你是不是也这样,拿着一本电工证,生怕哪天用的时候发现过期了?别急,今天咱们就来聊聊这个话题: 电工证超期能否复审呢… · 2026/11/14 5:25:22

安远县电工证怕考不过白交培训费?良心建议帮你避坑
安远县电工证怕考不过白交培训费?良心建议帮你避坑

安远县电工证怕考不过白交培训费?良心建议帮你避坑 怕考不过白交培训费?这个事真不是开玩笑,我见过太多人因为没提前了解清楚,结果花了大几千培训费,最后连考试都没通过。今天咱们就来聊聊【安远县电工证】这个事,不绕弯子,直接上干货,帮你少走弯路。… · 2026/11/14 5:25:22

电工证一周下证怎么查网上查询?实操考试心里没底怕挂科
电工证一周下证怎么查网上查询?实操考试心里没底怕挂科

电工证一周下证怎么查网上查询?实操考试心里没底怕挂科 你是不是也担心电工证实操考试过不了,怕挂科,耽误工作?特别是现在工程行业对电工证要求越来越严格,尤其是像焦作房建工程这样的项目,没有电工证根本不敢上手。而且,现在网上有很多“电工证一周下… · 2026/11/14 5:25:22

海口电工证哪家有名郑州报考避坑指南实操考试心里没底怕挂科
海口电工证哪家有名郑州报考避坑指南实操考试心里没底怕挂科

海口电工证哪家有名郑州报考避坑指南实操考试心里没底怕挂科 实操考试心里没底怕挂科?在海口电工证哪家有名这个问题上,很多人都像你一样,担心自己考不过、考了也没用、挂科后还得重新来一遍。其实,电工证不仅关系到你能不能上岗,还关系到你的职业发展和… · 2026/11/14 5:24:22

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43

有初级电工证怎么工作 2026河南最新政策怎么应对
有初级电工证怎么工作 2026河南最新政策怎么应对

有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31

为什么要低压电工证实操考试考什么
为什么要低压电工证实操考试考什么

为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码