【Leetcode】斐波那契数列python实现

方式1:直接递归。

缺点:超出时间限制。。。

class Solution:
    def fib(self, n: int) -> int:
        if n<=1
            return n
        else:
            return self.fib(n-1)+self.fib(n-2)

方式2:利用python的list做存储,自底向上Bottum-up

缺点:耗时依然长

class Solution:
    def fib(self, n: int) -> int:
        mylist = [0,1]
        if n<2:
            return n
        else:
            for i in range(2,n+1):
                mylist.append(mylist[i-1]+mylist[i-2])
            return mylist[n]%1000000007

方式3:利用python字典存储,自顶向下Top-down

缺点:依然超出时间限制。。。

class Solution:
    def fib(self, n: int) -> int:
        memo = {}
        if n in memo:
            return memo[n]
        else:
            if n<=1:
                f = n
            else:
                f = self.fib(n-2)+self.fib(n-1)
            memo[n] = f
            return memo[n]

方式4:利用python字典存储,自底向上Bottum-up

比方式2耗时少

class Solution:
    def fib(self, n: int) -> int:
        memo = {}
        for i in range(n+1):
            if i<=1:
                f = i
            else:
                f = memo[i-1]+memo[i-2] ######注意,这里不是函数。通过“记忆”高效实现递归
            memo[i] = f
        return memo[n]%1000000007

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值