斐波那契数列及简单dp应用
斐波那契数
-
问题:现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项 是1)。 n<=39
-
解决:
#方法一:迭代 class Solution: def fib(self, N: int) -> int: if N < 2: return N first = 0 second = 1 third = 1 while( N>=2): third = first + second first , second = second, third N -= 1 return third #方法二:递归 class Solution: def fib(self, N: int) -> int: if N < 2: return N return self.fib(N-1) + self.fib(N-2) #方法三:递归,剪枝减少重复计算 class Solution: def fib(self, N: int) -> int: if N <= 1: return N # self.cache = {} # if N-1 in self.cache.keys(): # pre = self.cache[N-1] # else: # pre = self.fib(N-1) # self.cache[N-1] = pre # if N-2 in self.cache.keys(): # ppre = self.cache[N-2] # else: # ppre = self.fib(N-2) # self.cache[N-2] = ppre # return pre + ppre self.cache = {0:0,1:1} return self.filter(N) def filter(self, N: int) -> int: if N in self.cache.keys(): return self.cache[N] self.cache[N] = self.filter(N-1)+self.filter(N-2) return self.filter(N) -
问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
-
解决:
#动态规划dp #1.定义状态:f(n):青蛙跳上第n级台阶的总跳法 #2.转移方程:f(n) = f(n+1) + f(n+2) #3.设置初始值:f(0) = 1 , f(1) = 1, f(2) = 2 class Solution: def jumpFloor(self, number): if number <= 1: return 1 dp = {0:1, 1:1} for i in range(2,number+1): dp[i] = dp[i-1] + dp[i-2] return dp[number]

浙公网安备 33010602011771号