給定一個(gè) m x n 的矩陣,如果一個(gè)元素為 0,則將其所在行和列的所有元素都設(shè)為 0。請(qǐng)使用原地算法。
示例 1:
輸入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
輸出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
</pre>
示例 2:
輸入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
輸出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]</pre>
進(jìn)階:
- 一個(gè)直接的解決方案是使用 O(mn) 的額外空間,但這并不是一個(gè)好的解決方案。
- 一個(gè)簡(jiǎn)單的改進(jìn)方案是使用 O(m + n) 的額外空間,但這仍然不是最好的解決方案。
- 你能想出一個(gè)常數(shù)空間的解決方案嗎?
空間復(fù)雜度O(m + n),分別用兩個(gè)list記錄0的行列
class Solution:
def setZeroes(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
row = []
col = []
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] == 0:
row.append(i)
col.append(j)
for i in row:
matrix[i] = [0 for _ in range(len(matrix[i]))]
for i in range(len(matrix)):
for j in col:
matrix[i][j] = 0
常數(shù)空間,用matrix 的首行首列記錄其余行的0的情況
class Solution:
# @param matrix, a list of lists of integers
# @return nothing (void), do not return anything, MODIFY matrix IN PLACE.
def setZeroes(self, matrix):
if len(matrix) == 0:
return ;
row, col = 1, 1
for i in range(0, len(matrix)):
if matrix[i][0] == 0:
col = 0
for j in range(0, len(matrix[0])):
if matrix[0][j] == 0:
row = 0
for i in range(1, len(matrix)):
for j in range(1, len(matrix[0])):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, len(matrix)):
for j in range(1, len(matrix[0])):
if matrix[i][0] == 0 or matrix[0][j] == 0:
matrix[i][j] = 0
if col == 0:
for i in range(0, len(matrix)):
matrix[i][0] = 0
if row == 0:
for j in range(0, len(matrix[0])):
matrix[0][j] = 0