iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

題目說明:給一個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

上一篇
Day 14 Invert Binary Tree
下一篇
Day 16 Power of Two
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言