每日一題20201206(118. 楊輝三角)
阿新 • • 發佈:2020-12-06
118. 楊輝三角
思路
如果你非要按照圖片裡的樣子來看的話,會複雜一點,如果你按照這樣的格式:
1
11
121
1331
14641
這樣會好理解一點,每次要計算的數,都是上一行的同位置索引+上一行的上個位置的值,如果上一行的上個位置或者上一行的同樣位置沒有值,則只加上有值的部分。
class Solution: def generate(self, numRows: int) -> List[List[int]]: # 防止numRows為0的情況,直接return [] if numRows == 0: return [] # 為了方便,直接新增第一行資料,這樣計算上一行的時候就永遠有值 ans = [[1]] # 索引從1開始,是因為上面我們已經加入了一行資料了 for i in range(1, numRows): # result是每一行的資料 result = [] # 為什麼是i+1,因為我們求的當前行的資料總是比上一行多一個 for j in range(i+1): # 如果j-1 < 0了,那麼說明j=0,那麼說明上一行沒有前一個數,直接加 # 上上一行的同位置數ans[i-1] 這個是上一行 同位置數是ans[i-1][j] if j - 1 < 0: result.append(ans[i-1][j]) # 如果j超出了上一行的索引範圍,那麼直接加上上一個的最後一個數 elif j > len(ans[i-1]) - 1: result.append(ans[i-1][j-1]) # 否則都在正常範圍內,直接加上ans[i-1]的j和j-1 else: result.append(ans[i-1][j-1]+ans[i-1][j]) ans.append(result) return ans
類似的寫法
下面那種做法把兩端固定了1和1,每次只計算中間的內容
class Solution: def generate(self, numRows: int) -> List[List[int]]: result = [] for n in range(numRows): if n == 0: result.append([1]) elif n == 1: result.append([1, 1]) else: result.append([1] + [x+result[n-1][i+1] for i, x in enumerate(result[n-1][:-1])] + [1]) return result