118. 第 n 个斐波那契数

leetcode 509 lintcode 366 数组 动态规划 免费

温馨提示:如果题目对您来说比较简单,可以采用 1.5 倍速观看。 立即注册观看更多视频

描述

这个题目说的是,给你一个非负整数 n,你要写一个函数返回第 n 个斐波那契数。其中斐波那契数列最开始的两项是 0 和 1,后面任意一项都是它前面两个数字之和。

比如说,你写的函数是 f,那么就有:

f(0) = 0,
f(1) = 1,
f(2) = 0 + 1 = 1,
f(3) = 1 + 1 = 2,
f(4) = 1 + 2 = 3,
f(5) = 2 + 3 = 5,
...

以此类推。
代码
public class AlgoCasts {

  // Time: O(2^n), Space: O(n)
  public int fibRecursive(int n) {
    if (n <= 0) return 0;
    if (n == 1) return 1;
    return fibRecursive(n-1) + fibRecursive(n-2);
  }

  // Time: O(n), Space: O(n)
  public int fibIterative(int n) {
    if (n <= 0) return 0;
    if (n == 1) return 1;
    int[] d = new int[n+1];
    d[0] = 0; d[1] = 1;
    for (int i = 2; i <= n; ++i)
      d[i] = d[i-1] + d[i-2];
    return d[n];
  }

  // Time: O(n), Space: O(1)
  public int fibIterativeO1(int n) {
    if (n <= 0) return 0;
    if (n == 1) return 1;
    int first = 0, second = 1;
    for (int i = 2; i <= n; ++i) {
      int third = first + second;
      first = second;
      second = third;
    }
    return second;
  }

}

关于 AlgoCasts

AlgoCasts 旨在用心做好每一个算法讲解视频。每个视频包含两个部分:题目的剖析讲解以及编码,力求在讲解清楚到位的基础上,尽可能地保持视频精简短小,让大家可以在碎片时间里进行学习,并收获这些算法题背后的思想与乐趣。