爬樓梯 / 斐波那契數列

1.問題描述app

假設你正在爬樓梯。須要 n 階你才能到達樓頂。

每次你能夠爬 1 或 2 個臺階。你有多少種不一樣的方法能夠爬到樓頂呢?

注意:給定 n 是一個正整數。

示例 1:

輸入: 2
輸出: 2
解釋: 有兩種方法能夠爬到樓頂。
1.  1 階 + 12.  2 階
示例 2:

輸入: 3
輸出: 3
解釋: 有三種方法能夠爬到樓頂。
1.  1 階 + 1 階 + 12.  1 階 + 23.  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

相關文章
相關標籤/搜索