题目描述
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
示例:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]
解题思路
将二维问题转化为一维思路,即在矩阵中,当数字为0时,将其对应行列上的所有数字都置零,可以通过遍历矩阵,将每一个0对应的行列号记录下来,遍历完成后,再对矩阵进行置零操作,此时只需要分别遍历记录下来的行号和列号。这里采用的二维列表分别存储需要置零的行号和列号。
代码实现
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
rows = len(matrix)
cols = len(matrix[0])
# 创建一个长度为2的二维空列表作为记录
flag = [[] for _ in range(2)]
for i in range(0,rows):
for j in range(0,cols):
if matrix[i][j] == 0:
# 分别存储需要置零的行号和列号
flag[0].append(i)
flag[1].append(j)
for i in flag[0]:
for j in range(0,cols):
matrix[i][j] = 0
for j in flag[1]:
for i in range(0,rows):
matrix[i][j] = 0
return matrix