leetcode 118 Pascal's Triangle(楊輝三角) python3 兩種解法(清晰的分類討論 / 優雅的拼接反向疊加)
阿新 • • 發佈:2019-02-05
class Solution:
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
# method one: 用了if 條件語句,不夠簡潔。
# res = []
# for i in range(numRows+1):
# if i == 1:
# row = [1]
# res.append(row)
# if i >= 2:
# tmp = []
# for j in range(len(row)-1):
# tmp.append(row[j] + row[j+1])
# row = [1] + tmp + [1]
# res.append(row)
# return res
# method two(借鑑)
res = [[1]] # 初始化[1],簡化了分類討論的步驟
for i in range(1,numRows):
print(res[-1]+[0],[0]+res[-1])
res.append(list(map(lambda x, y : x + y, res[-1]+[0], [0]+res[-1])))
# list = map(func, iter) 強制型別轉換才能生成list型別的結果
# res[-1] 前一次迭代得到的列表,拼接[0]之後,反向疊加。就可以得到新的迭代序列,非常漂亮的數學結構
return res[:numRows] # 巧妙地避免了n=0 的特殊情況