爬楼梯 / 斐波那契数列

1.问题描述

假设你正在爬楼梯。需要 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)

 

2.代码实现

2.1 递归

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.斐波那契数列

和爬楼梯问题一样,只是前两个初始值不一样

 

posted @ 2019-03-07 11:07  四片叶子的三叶草  阅读(425)  评论(0编辑  收藏  举报