剑指Offer #07 斐波那契数列(四种解法)

斐波那契数列

http://www.nowcoder.com/questionTerminal/c6c7742f5ba7442aada113136ddea0c3

题目来源:牛客网-剑指Offer专题
题目地址:斐波那契数列

题目描述

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

题目解析

方法一:
普通递归版求法,这种方法通常和汉诺塔一起被放在课本的递归教学部分,应该是面试官不希望看到的算法。

利用上面递推式,自顶向下进行求解,因为存在大量的重叠子问题,时间复杂度为

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

方法二:
我们可以将递推式的求解从自顶向下改为自底向上(循环实现)。简而言之,我们已知前两项的值,然后我们就可以用前两项的值求出第3项的值,接着求第4、第5、……,直到求出第n项的值。(废话)

实现过程如下图所示,两个相同颜色的箭头可以确定一个新的数列项

1
上述算法的时间复杂度为 ,在面试中够用了,如果还是觉得简单可以继续往下看。

public class Solution {
    public int Fibonacci(int n) {
        int a = 0, b = 1;
        for (int i = 1; i <= n; i++) {
            a = a + b;
            b = a - b;
        }
        return a;
    }
}

方法三:
我们知道:
将其转化成矩阵运算可得

而右边的阶矩阵又可以进一步分解为

按照这样一直分解下去直到右边的阶矩阵F(2),F(1),即

这时利用矩阵版的快速幂求解其中的矩阵幂乘,就可以在 的时间复杂度下得出Fibonacci数列的第n项的值。

这种方法通常是用在算法比赛中,在面试中容易装逼失败不适合使用,这里也不挂板子了。

方法四:
根据上面的递推式,利用我们高中学过的“待定系数法”可以推导出斐波那契数列的通项公式。公式如下,(推导过程略)

公式法时间复杂度为 ? 感觉不然,求公式中的 次方应该要用上快速幂,我个人认为时间复杂度应该也是 。(我要滚去看源码了

public class Solution {
    public int Fibonacci(int n) {
        double a = Math.sqrt(5)/5;
        double b = Math.pow((1+ Math.sqrt(5))/2, n);
        double c = Math.pow((1- Math.sqrt(5))/2, n);
        return (int)(a * (b - c));
    }
}

后记:
如果你在写出循环版之后,再给面试官描述后面两种算法,并流畅写出通项公式的推导过程,相信肯定可以取得面试官的芳心~


如果本文对你有所帮助,要记得点赞哦~

全部评论
方法二这里代码不对, 返回的是 a,所以 a 应该是更高项,初始值应该改成 a = 1, b = 0. 这里是利用差来还原上一项. 代码上相比使用 a, b, c 三个变量赋值值的写法更为简洁.
点赞 回复 分享
发布于 09-29 02:54 上海
方法二的代码有问题
点赞 回复 分享
发布于 2020-04-08 17:35

相关推荐

11-17 11:15
门头沟学院 Java
金山办公终于发offer了,但薪资和平台都不如已有的offer打算拒了,A不了薪资,不满意直接拒了,留给需要的人嘿嘿嘿时间线:10.14线下一面&nbsp;,10.23线上二面,下午发测评,11月1日HR面,11月14日电话谈薪,11月17日直接发offer
star__plat...:好兄弟干的好啊,解气。金山第一次笔难度高的离谱,第二次简单的离谱全A了,用人部门筛选中估计最后还是要挂我,就这今早智联招聘还给我发信息让我投
offer帮选
点赞 评论 收藏
分享
11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
69
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务