Leetcode Hot 1001 分钟
矩阵置零
本文讲解 LeetCode 73. 矩阵置零,提供一种基于集合标记的 O(mn) 时间、O(m+n) 空间解法,代码简洁易懂。

阅读要点
- 使用两个集合分别记录需要置零的行和列
- 第一次遍历矩阵,遇到零则记录行列索引
- 第二次遍历矩阵,根据集合将对应元素置零
- 时间复杂度 O(mn),空间复杂度 O(m+n)
题目

解法一:集合标记法
最直观的思路是使用两个集合分别记录需要置零的行和列。首先遍历整个矩阵,遇到零元素时,将其行号和列号分别加入集合;然后再次遍历矩阵,对于每个元素,如果其行号或列号在集合中,则将其置零。
答案
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
row = set()
col = set()
h = len(matrix)
w = len(matrix[0])
for i in range(h):
for j in range(w):
if matrix[i][j] == 0:
row.add(i)
col.add(j)
for i in range(h):
for j in range(w):
if i in row or j in col:
matrix[i][j] = 0该方法时间复杂度 O(mn),空间复杂度 O(m+n)。其他更优的解法(如常数空间)可参考官方题解,此处不再赘述。