题:一只青蛙一次可以跳上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)功能,避免参数重复时反复调用,达到提高性能的作用,在递归函数中作用特别明显。这是一项优化技术,它把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。