美文网首页
《剑指offer》(七)-斐波那契数列(java)

《剑指offer》(七)-斐波那契数列(java)

作者: 鼠小倩 | 来源:发表于2019-11-11 13:04 被阅读0次

    斐波那契数列

    题目描述

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

    代码格式要求

    public class Solution {
        public int Fibonacci(int n) {
            
        }
    }
    

    解题一直接运用公式

    1.思路


    image.png

    2.代码

    public class Solution7 {
        public int Fibonacci(int n) {
            if(n<=1) {
                return n;
            }
            return Fibonacci(n-1)+Fibonacci(n-2);
        }
    }
    
    1. 复杂度
      时间复杂度:O(2^n)
      空间复杂度:O(1)

    解题二-利用数组

    1.代码

    public class Solution7 {
        public int Fibonacci(int n) {
            int[] fib=new int[40];
            fib[0]=0;
            fib[1]=1;
            for(int i=0;i<n;i++) {
                fib[i]=fib[i-1]+fib[i-2];
            }
            return fib[n];
        }
    }
    
    1. 复杂度
      时间复杂度:O(2^n)
      空间复杂度:O(1)

    解题三-用变量代替

    1.思路
    我们可以发现每次就用到了最近的两个数,所以我们可以只存储最近的两个数

    • cur 存储第 n 项的值
    • pre1 存储第 n-1 项的值
    • pre2存储第 n-2 项的值

    2.代码

    public class Solution7 {
        public int Fibonacci(int n) {
            if(n<=1) {
                return n;
            }
            int cur=0;
            int pre1=1;
            int pre2=0;
            for(int i=2;i<=n;i++) {
                cur=pre1+pre2;
                pre2=pre1;
                pre1=cur;
            }
            return cur;
        }
    }
    
    1. 复杂度:
      时间复杂度:O(n)
      空间复杂度:O(1)

    相关文章

      网友评论

          本文标题:《剑指offer》(七)-斐波那契数列(java)

          本文链接:https://www.haomeiwen.com/subject/lwifictx.html