面试题10- I. 斐波那契数列

题目描述:

写一个函数,输入 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。

示例 1:

输入:n = 2
输出:1

示例 2:

输入:n = 5
输出:5

提示:

0 <= n <= 100

Java解法(递归):

class Solution {
    public int fib(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        return fib(n - 1) + fib(n-2);
    }
}

可以分析fib(10)的求解过程,如果想获得fib(10),必须先计算出fib(9)和fib(8),同理,得到fib(9),需要先计算fib(8)和fib(7)的值,我们可以使用树形结构来表示这种依赖关系。不难发现,树中很多节点是重复的,重复的节点数会随着n的增大,急剧增加,这样计算的时间复杂度会以n的指数方式增长。
Java解法(循环):

class Solution {
    public int fib(int n) {
        if(n == 0) return 0;
        if(n == 1) return 1;
        int fib1 = 1;
        int fib2 = 0;
        int fibn = 0;
        for (int i = 2; i <= n; i++)
        {
            fibn =(fib1 + fib2) % 1000000007;
            fib2 = fib1;
            fib1 = fibn;
        }
        return fibn;
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容