题目:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
思路:将第一行和第一列作为横纵坐标,进行遍历,当有值为0时,横纵坐标为零,此遍历不能包含第一行和第一列(单独判断);进行第二次遍历,判断当前的横纵坐标,如果横纵坐标有一个为零,则将将该值置零。
原地算法即限制了空间复杂度应为o(1),所以不能新建矩阵,是指声明了第一列是否置零的布尔值,使用第一行和第一列作为横纵坐标。
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
row = len(matrix)
col = len(matrix[0])
flag_col0 = False
for i in range(row):
if matrix[i][0] == 0: flag_col0 = True
for j in range(1, col):
if matrix[i][j] == 0:
matrix[i][0] = matrix[0][j] = 0
for i in range(row - 1, -1, -1):
for j in range(col - 1, 0, -1):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0
if flag_col0:
matrix[i][0] = 0