1.問題描述app
假設你正在爬樓梯。須要 n 階你才能到達樓頂。 每次你能夠爬 1 或 2 個臺階。你有多少種不一樣的方法能夠爬到樓頂呢? 注意:給定 n 是一個正整數。 示例 1: 輸入: 2 輸出: 2 解釋: 有兩種方法能夠爬到樓頂。 1. 1 階 + 1 階 2. 2 階 示例 2: 輸入: 3 輸出: 3 解釋: 有三種方法能夠爬到樓頂。 1. 1 階 + 1 階 + 1 階 2. 1 階 + 2 階 3. 2 階 + 1 階
也就是斐波那契數列問題,即從3開始,每一項都是前兩項的和,F(N) = F(N-1)+F(N-2)spa
2.代碼實現code
2.1 遞歸blog
class Solution: val_dict = {} def climbStairs(self, n: int) -> int: if n <= 2 : return n if n not in self.val_dict : self.val_dict[n] = self.climbStairs(n-1) + self.climbStairs(n-2) return self.val_dict[n]
2.2 動態規劃遞歸
class Solution: def climbStairs(self, n: int) -> int: if n <= 2 : return n F =[] F.append(0) F.append(1) F.append(2) for i in range(3, n+1) : F.append(F[i-1] + F[i-2]) return F[n]
3.斐波那契數列io
和爬樓梯問題同樣,只是前兩個初始值不同class