LeetCode刷題記錄——第七十題(爬樓梯)
阿新 • • 發佈:2018-12-19
題目描述
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
示例 1:
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
- 1 階 + 1 階
- 2 階
示例 2:
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
- 1 階 + 1 階 + 1 階
- 1 階 + 2 階
- 2 階 + 1 階
思路分析
- 因為只可以爬一個或者兩個臺階,相當於上第k個臺階時只可能是從第k-1和第k-2個臺階爬上來,所以可能的情況有兩種:
- 到達k-1臺階後,爬上一級
- 到達k-2臺階後,爬上兩級
- 設m種方法到達k-2級臺階,n種方法到達k-1級臺階。所以到達k級有m+n種方法。
程式碼實現
class Solution:
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
if n <= 2:
return n
temp = [0,1,2] #其實是斐波那契數列
for i in range(3 ,n+1):
temp.append(temp[-1]+temp[-2])
return temp[-1]