斐波那契數列
問題描述:
寫一個函數,輸入 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)