剑指 Offer 10- II. 青蛙跳台阶问题、剑指 Offer 10- I. 斐波那契数列

45 篇文章 1 订阅
9 篇文章 0 订阅

题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

 # 递推公式/状态转移方程 与斐波那契数列相同。

class Solution:
    def numWays(self, n: int) -> int:
        res=[1,1]
        if n==0 or n==1:#i=0,1
            return res[n]
        else:
            for i in range(2,n+1):#i=2...n
                res[0],res[1]=res[1],res[0]+res[1]
            return res[1]%(10**9+7)

https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/solution/mian-shi-ti-10-ii-qing-wa-tiao-tai-jie-wen-ti-dong/


  •  #动态规划  !!!

#转移方程:res[i]=res[i-1]+res[i-2]

#DP
class Solution:
    def fib(self, n: int) -> int:
        res=[0,1]#初始状态
        for i in range(2, n+1):
            res.append(res[i-1]+res[i-2])#转移方程:res[i]=res[i-1]+res[i-2]
        return res[n]% (10 ** 9 + 7)

#最优化DP方法:!!!
class Solution:
    def fib(self, n: int) -> int:
        res=[0,1]#初始状态
        if n==0 or n==1:
            return res[n]
        else:
            for i in range(2, n+1):
                res[0],res[1]=res[1],res[0]+res[1]#两数字交替前进,节省列表空间
            return (res[1])% (10 ** 9 + 7)
  •  #记忆化递归 

class Solution:
    mod = 10**9+7
    #@lru_cache(None)#!!!
    def fib(self, n: int) -> int:
        if n==0:
            return 0
        elif n==1:
            return 1
        return (self.fib(n-1) + self.fib(n-2))% self.mod

lru_cache 装饰器会记录以往函数运行的结果,实现了备忘(memoization)功能,避免参数重复时反复调用,达到提高性能的作用,在递归函数中作用特别明显。这是一项优化技术,它把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值