剑指offer-斐波那契数列

2019-09-28  本文已影响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)

上一篇下一篇

猜你喜欢

热点阅读