https://leetcode.cn/problems/fibonacci-number/
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。
示例 1:
输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
class Solution:
def fib(self, n: int) -> int:
# 难度:☆☆☆
# 方法1:普通递归
# if n == 0:
# return 0
# elif 1 <= n <= 2:
# return 1
# else:
# return self.fib(n - 1) + self.fib(n - 2)
# 方法2:带memo的递归
# memo = {}
# if n in memo:
# return memo[n]
# elif n <= 1:
# return n
# else:
# memo[n] = self.fib(n - 1) + self.fib(n - 2)
# return memo[n]
# 将递归写入函数
# memo = {}
# def f(n):
# if n < 2:
# return n
# elif n in memo:
# return memo[n]
# else:
# memo[n] = f(n-2) + f(n-1)
# return memo[n]
# return f(n)
# 方法3:动态规划
if n == 0: # base case
return 0
dp = [0] * (n + 1) # ① 创建dp
dp[0], dp[1] = 0, 1 # ② 初始化
# ③ 遍历递归(状态转移方程)
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[-1]