美文网首页
剑指offer-斐波那契数列

剑指offer-斐波那契数列

作者: 纳萨利克 | 来源:发表于2019-09-28 11:23 被阅读0次

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

    思路
    斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)


    使用递归
    Java

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

    时间复杂度:O(2^n)
    空间复杂度:O(1)


    使用数组
    Java

    public class Solution {
      public int Fibonacci(int n) {
        if (n <= 1) {
          return n;
        }
        int[] arr = new int[40];
        arr[0] = 0;
        arr[1] = 1;
        for (int i = 2; i <= n; i++) {
          arr[i] = arr[i-1] + arr[i-2];
        }
        return arr[n];
      }
    }
    

    时间复杂度:O(n)
    空间复杂度:O(n)

    我们只需要两个数相加,存储前两个数即可


    优化存储
    Java

    public class Solution {
      public int Fibonacci(int n) {
        if (n <= 1) {
          return n;
        }
        int sum = 0;
        int one = 0;
        int two = 1;
        for (int i = 2; i <= n; i++) {
          sum = one + two;
          one = two;
          two = sum;
        }
        return sum;
      }
    }
    

    时间复杂度:O(n)
    空间复杂度:O(1)


    f(3) = one
    f(5) = sum
    f(4) = sum - one

    public class Solution {
      public int Fibonacci(int n) {
        if (n <= 1) {
          return n;
        }
        int sum = 1;
        int one = 0;
        for (int i = 2; i <= n; i++) {
          sum = one + sum;
          one = sum - one;
        }
        return sum;
      }
    }
    

    时间复杂度:O(n)
    空间复杂度:O(1)

    相关文章

      网友评论

          本文标题:剑指offer-斐波那契数列

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