音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 矩阵置零
552 字
3 分钟
LeetCode | 矩阵置零
分类:数组 / 矩阵
题目#
给定一个 m x n 的矩阵 matrix。如果某个元素为 0,就把它所在的整行和整列都设为 0。
要求直接修改原矩阵。
示例:
1输入:2[3 [1, 1, 1],4 [1, 0, 1],5 [1, 1, 1]6]7
8输出:9[10 [1, 0, 1],11 [0, 0, 0],12 [1, 0, 1]13]讲解#
这道题不能看到 0 就立刻把整行整列改成 0。
原因是:新改出来的 0 会影响后面的判断,导致本来不该被清零的位置也被清零。
所以要分两步:
- 先记录哪些行、哪些列需要变成
0。 - 再统一把这些行和列改成
0。
这里直接使用标记数组:
row_0[row]表示第row行要不要变成0col_0[col]表示第col列要不要变成0
先扫描一遍矩阵。只要看到 matrix[row][col] == 0,就把 row_0[row] 和 col_0[col] 标记为 1。
再扫描一遍矩阵。如果当前位置的行被标记了,或者列被标记了,就把这个位置改成 0。
复杂度:
- 时间复杂度:
O(mn) - 空间复杂度:
O(m + n)
吐槽:
官方题解还有两个标记变量和一个标记变量的写法,时间复杂度都是 O(mn),空间复杂度可以做到 O(1)。它们会复用矩阵的第一行、第一列做标记,笔者觉得,可读性不如这个版本;实际开发里一般也不至于为了这点空间把代码写得那么绕,所以这里不写。
代码#
源码#
1from typing import List2
3
4class Solution:5 def setZeroes(self, matrix: List[List[int]]) -> None:6 """7 Do not return anything, modify matrix in-place instead.8 """9 m = len(matrix)10 n = len(matrix[0])11
12 row_0 = [0] * m13 col_0 = [0] * n14
15 for row in range(0,m):16 for col in range (0,n):17 if matrix[row][col] == 0 :18 row_0[row],col_0[col] = 1,119
20 for row in range(0,m):21 for col in range (0,n):22 if (row_0[row] or col_0[col]) :23 matrix[row][col] = 0测试#
1from src.python._073_Set_Matrix_Zeroes import Solution2
3
4sol = Solution()5
6matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]7assert sol.setZeroes(matrix) is None8assert matrix == [[1, 0, 1], [0, 0, 0], [1, 0, 1]]9
10matrix = [[0, 1, 2, 0], [3, 4, 5, 2], [1, 3, 1, 5]]11sol.setZeroes(matrix)12assert matrix == [[0, 0, 0, 0], [0, 4, 5, 0], [0, 3, 1, 0]]13
14matrix = [[1, 0]]15sol.setZeroes(matrix)16assert matrix == [[0, 0]]17
18matrix = [[1], [0]]19sol.setZeroes(matrix)20assert matrix == [[0], [0]]21
22print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2026-07-31
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 搜索二维矩阵
LeetCodeLeetCode 搜索二维矩阵题解:把矩阵看作一维数组做二分,或者先定位行再二分查找。
2
LeetCode | 移动零
LeetCodeLeetCode 移动零题解:使用双指针原地移动零,同时保持非零元素相对顺序。
3
LeetCode | 接雨水
LeetCodeLeetCode 接雨水题解:理解每个位置的左右挡板,用双指针在线性时间内计算总积水量。
4
LeetCode | 搜索插入位置
LeetCodeLeetCode 搜索插入位置题解:用二分查找在升序数组中找到目标位置或插入位置。
5
LeetCode | 最长连续序列
LeetCodeLeetCode 最长连续序列题解:使用哈希集合只从连续序列起点开始统计最长长度。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



