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)

截屏2020-12-27 下午5.03.59

  • 其次,数据大小会超过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

posted @ 2020-12-27 17:14  zeroluo  阅读(76)  评论(0)    收藏  举报