斐波那契数列
问题描述:
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
解题思路
动态规划
- 根据斐波那契数列的特点,用递归的思路即可
- 时间复杂度:
O(n)
,空间复杂度:O(1)
class Solution {
public int fib(int n) {
int first = 0, second = 1, Mod = 1_000_000_007;
for (int i = 0; i < n; ++i) {
int third = (first + second) % Mod;
first = second;
second = third;
}
return first;
}
}
拓展
此类题目(动态规划)的解题思路:
- DFS (top-down)
- DFS + Memorization (top-down)
- DP (down-top)
- N Variables (down-top)