leetcode 剑指offer 10-1 斐波那契数列
问题描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), (N > 1)
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
注:这道题很多坑「我提交了好多次啊 呜呜呜呜OWO」
- 首先看到Fibonacci就想到递归的就直接挂了,如果采用递归,会涉及大量重复的计算,计算F(N-1)与F(N)时,会重复计算F(N-2)

- 其次,数据大小会超过int的范围,所以取模操作应该在每次计算后进行,防止某次计算后得到的数据超出范围。
本人解法:
class Solution {
public:
int fib(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else
{
int a[101] = {0 ,1};
for(int i = 2; i <= n; ++i)
{
a[i] = (a[i - 2] + a[i - 1])%1000000007;
}
return a[n];
}
}
};
具体详解与复杂度分析,请看link

浙公网安备 33010602011771号