題目說明:給一個m*n的矩陣,如果該矩陣中有元素為0,就要將其直行和橫列的元素都變成零,要注意的是必須就地(in place)
Case 1
Input: matrix = [[1,1,1],[1,0,1],[1,1,1]]
Output: [[1,0,1],[0,0,0],[1,0,1]]
Case 2
Input: matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
Output: [[0,0,0,0],[0,4,5,0],[0,3,1,0]]
解題思路:從上述範例可以知道,當第i列第j行的元素為零時,其第i列的第一個到最後一個元素都為0,第j行也是同樣的道理。所以我們可以透過兩個array(row, column)紀錄元素為0時所在的位置,並且透過位置來讓該矩陣直航以及橫列的元素都為0
附上程式碼以及註解
Python
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
rows=[]#紀錄元素=0時row的位置
cols=[]#紀錄元素=0時column的位置
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
rows.append(i)#元素=0時紀錄位置
cols.append(j)#元素=0時紀錄位置
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if i in rows or j in cols:
matrix[i][j] = 0
#只要直行或橫列其中之一有在紀錄的row或column裡面就將該位置都設為0