题目:
一只青蛙一次可以跳上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值。