题目:
剑指 Offer 10 - I. 斐波那契数列。
写一个函数,输入 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。
链接:https://leetcode-cn.com/leetbook/read/illustrate-lcof/xslxpr/
示例:
输入:n = 2
输出:1
输入:n = 5
输出:5
提示: 0 <= n <= 100
思路:
首先判断 n 的值,如果 n 为0或1,直接返回n。
由于斐波那契数列的第n+1个数需要计算d第n个和第n-1个数的和,所以定义两个变量a,b用于存储F(0)和F(1)。
循环n-1次计算,每次将b的值赋予a,a+b取模后的值赋予b,循环结束后返回b。
取模1000000007运算是为了防止数字溢出。
代码:
class Solution:
def fib(self, n: int) -> int:
if n == 0 or n == 1: return n
a, b = 0, 1
for i in range(n-1):
a, b = b, (a + b) % 1000000007
return b
时间复杂度O(n),空间复杂度O(1).