• 剑指 Offer 10- I. 斐波那契数列


    剑指 Offer 10- I. 斐波那契数列

    1.结果

    1.1 思路二的结果

    执行结果:通过显示详情〉

    执行用时:0 ms ,在所有Java提交中击败了100.00%的用户

    内存消耗:38.2 MB ,在所有Java提交中击败了69.56%的用户

    通过测试用例:51/51

    1.2 思路一的结果

    超时

    2.时间花费

    花费约一个小时,主要花费在答案取模那里。

    认为是最后答案取模,没想到是每一步的答案取模。

    3.思路

    • 思路一:做递归就可以了,但是这样会超时。

      这是因为在计算时,会有很多重复计算的地方。比如计算F(44)时,就会计算很多次F(5)

      简单但垃圾的方法

    • 思路二:按照手算的方式,一次叠加计算,每次都保留最新的两个元素即可

    注意点:这里比较麻烦的是对答案取模这里,主要没读清楚,不然就算使用long也会溢出导致答案出错。

    4.code

        /**
         * 剑指 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。 */ public int fib(int n) { int re = getRe1(n); System.out.println(re); return re % 1000000007; } public int getRe1(int n) { /** * 直接顺着计算,依次叠加,这样就不会重复计算 */ if (n == 0) { return 0; } else if (n == 1) { return 1; } else { int a = 0, b = 1; for (int i = 2; i < n; i++) { int t = b; b = (a + b) % 1000000007; a = t; // System.out.println(a+"\t"+b); // if (a+b>1000000007){ // System.out.println("F:"+i); // } } return (a + b) % 1000000007; } } public int getRe(int n) { /** * 简单递归,就是倒着算,这样会重复计算,导致超时 */ if (n == 0) { return 0; } else if (n == 1) { return 1; } else { return getRe(n - 1) + getRe(n - 2); } }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
  • 相关阅读:
    JUC——并发编程—第二部分
    从基础到实践,回顾Elasticsearch 向量检索发展史
    (十九)Spring中的八大模式
    非常详细的 Linux C/C++ 学习路线总结!助我拿下腾讯offer
    【Linux】Qt Remote之Remote开发环境搭建填坑小记
    Java#15(集合)
    Shiro之保存Session到数据库中-yellowcong
    科技企业如何做到FTP数据安全保护
    Linux网络:关于TCP / IP 五层协议栈的总结
    A_A01_002 MDK5(STM32)软件安装
  • 原文地址:https://blog.csdn.net/qq_37774098/article/details/126835816