写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:1
示例 2:输入:n = 5
输出:5
提示:
0 <= n <= 100
这道题 ,我用递归,答案显示超时了。因为每次计算F(n)和F(n-1)的时候,都要计算F(n-2),空间复杂度为O(n),时间复杂度为O(2^n)
所以,可以用动态规划的方法,dp[i] = dp[i-1]+dp[i-2],这样的话空间复杂度是O(n)
可以更简单地用三个变量来存储,空间复杂度降为O(1)
class Solution:
def fib(self, n: int) -> int:
a =0
b = 1
for _ in range(n):
a,b = b,(a+b)%1000000007
return a
这个取模 1e9+7(1000000007)是防止溢出