73矩阵置零
给定一个mxn
的矩阵,如果一个元素为0
,则将其所在行和列的所有元素都设为0
。请使用原地算法。
方法1:复制原数组
时间复杂度:O(MN*(M+N))
空间复杂度:O(MN)
把输入的原始数组复制一份,那么根据copy出来的数组判断某个位置是否为 0,就是原始数组中的该位置是0。遇到 matrix_copy 的一个位置是 0,那么直接修改 matrix 的行列全部是 0。
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
if not matrix or not matrix[0]:
return
M, N = len(matrix), len(matrix[0])
matrix_copy = copy.deepcopy(matrix) #注意是deepcpoy
for i in range(M):
for j in range(N):
if matrix_copy[i][j] == 0:
for k in range(M):
matrix[k][j] = 0
for k in range(N):
matrix[i][k] = 0
方法2:记录数组
时间复杂度:O(MN)
空间复杂度:O(M+N)
遍历一次矩阵,记录一下每行、列是否出现了 0;如果出现了 0,最终将此行列置为 0
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
if not matrix or not matrix[0]:
return
M, N = len(matrix), len(matrix[0])
row, col = set(), set()
for i in range(M):
for j in range(N):
if matrix[i][j] == 0:
row.add(i)
col.add(j)
for i in range(M):
for j in range(N):
if i in row or j in col:
matrix[i][j] = 0