爬楼梯 / 斐波那契数列

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

相关文章
相关标签/搜索