题目
【剑指offer】010. 斐波那契数列①
写一个函数,输入 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
递归
递归会有很多重复的计算,效率低。时间复杂度O(2^n)类似与二叉树节点数量,空间复杂度是O(n),类似二叉树的高度.容易超时
class Solution:
def fib(self, n: int) -> int:
if n<=1:
return n
return (self.fib(n-1)+self.fib(n-2)) % 1000000007
解法2
dp方法
时间O(n),空间O(1)
class Solution:
def fib(self, n:int)-> int:
if n<=1:
return n
a = 0
b = 1
mod = 1000000007
for i in range(2, n+1, 1):
t = b
b = (a + b)%mod
a = t
return b