剑指offer-斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数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)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 斐波那契数列是在学编程期间最先接触的到的知识,也是思维拓展比较多的一个知识点,很重要。 我的理解 斐波那契数列,常...
    playman阅读 3,446评论 0 1
  • 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39最基础的计算机算法...
    qming_c阅读 3,101评论 0 0
  • 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 ...
    KEEPINUP阅读 3,375评论 0 1
  • 本文首发于我的个人博客:尾尾部落 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的...
    繁著阅读 2,981评论 0 0
  • 本文首发于我的个人博客Suixin’s Blog原文: https://suixinblog.cn/2019/03...
    Sui_Xin阅读 1,526评论 0 1

友情链接更多精彩内容