Day8 青蛙跳台阶问题

题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
leetcode原题链接

思路:
跳上n级台阶的方法有f(n)种
反推,假设现在青蛙已经跳上n级台阶了,有“2”种跳上n级台阶的方法——从n-1级台阶起跳,跳一步;从n-2级台阶起跳,跳两步。
即:f(n)=f(n-1)+f(n-2)
可以发现,这道题和上一题【斐波那契数列】是一样的。

f(0)=1【由leetcode给出的示例得知】
f(1)=1
f(2)=2【已符合递推公式】

代码:
披着青蛙皮的斐波那契数列

class Solution:
    def numWays(self, n: int) -> int:
        f={
    
    }#创建字典f
        f[0]=1
        f[1]=1
        if n>1:
            for i in range(2,n+1):#注意这里range的起点是2,而非0
                f[i]=f[i-1]+f[i-2]
        return f[n]%1000000007#题中要求 答案取模

tips:
倒数第三行代码若写成for i in range(n+1):,即for i in range(0,n+1)会报错【KeyError: -1】。
因为i=0时,运行代码f[0]=f[-1]+f[-2]。-1和-2都是错误的key值。

猜你喜欢

转载自blog.csdn.net/weixin_47128888/article/details/112913814