class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
#空间复杂度1
if not matrix or not matrix[0]:
return
M, N = len(matrix), len(matrix[0])
row0, col0 = False, False
for i in range(M):
if matrix[i][0] == 0:
col0 = True
for j in range(N):
if matrix[0][j] == 0:
row0 = True
for i in range(1, M):
for j in range(1, N):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, M):
for j in range(1, N):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0
if row0:
for j in range(N):
matrix[0][j] = 0
if col0:
for i in range(M):
matrix[i][0] = 0
#空间复杂度m+n
m, n = len(matrix), len(matrix[0])
row, col = [False] * m, [False] * n
for i in range(m):
for j in range(n):
if matrix[i][j] == 0:
row[i] = col[j] = True
for i in range(m):
for j in range(n):
if row[i] or col[j]:
matrix[i][j] = 0
#空间复杂度m*n
row = len(matrix)
col = len(matrix[0])
index = []
for i in range(row):
for j in range(col):
if matrix[i][j]==0:
index.append([i,j])
for i,j in index:
for x in range(col):
matrix[i][x]=0
for y in range(row):
matrix[y][j]=0
- スペースの複雑さm * n * 2
- 2次元マトリックスを使用して、0位置のインデックスを記録します
- 次に、この2次元配列をトラバースして、元の行列のゼロ以外の要素を0に設定します。
- スペースの複雑さm + n
- 行と列の領域の2つの配列を使用して、変数を記録します
- 現在の要素が0の場合、レコードの行と列は両方ともTrueです。
- 次に、行列をトラバースします。行と列のいずれかの要素がTrueの場合、現在の位置を0として記録します。
- 全体として、現在の要素は最初の列と最初の行を介して記録されます
- スペースの複雑さ1
- 2つの変数を使用して、行と列に0があるかどうかをそれぞれ記録します。
- 最初の行と最初の列をそれぞれトラバースし、0がある場合はマークを付けます
- 次に、配列を2回繰り返します
- まず、現在の位置が0の場合、最初の列と最初の行の位置も0に設定されます。
- 2番目;現在の位置の最初の行または最初の列に0がある場合は、現在の要素を0に設定します
- 前に記録した変数を使用して、最初の行と最初の列に0があるかどうかを観察し、最初の行と最初の列を0に設定します。
- 本質は最初の行と最初の列を使用してマークを付けることですが、今回はマークは変数を使用します