LeetCode 面試題10- I. 斐波那契數列【劍指Offer】【Easy】【Python】【動態規劃】
問題
寫一個函數,輸入 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。
示例 1:
輸入:n = 2
輸出:1
示例 2:
輸入:n = 5
輸出:5
提示:
0 <= n <= 100
注意:本題與主站 509 題 相同。
思路
動態規劃
fib(n) = fib(n - 1) + fib(n - 2)
注意,fib(n)會越界,所以最好是:
fib(n) % 1000000007 = (fib(n - 1) % 1000000007 + fib(n - 2) % 1000000007) % 1000000007
但是因爲 Python 中整形數字的大小限制取決計算機的內存(可理解爲無限大),因此可不考慮大數越界問題。
時間複雜度: O(n)
空間複雜度: O(1)
Python3代碼
class Solution:
def fib(self, n: int) -> int:
dp_0, dp_1 = 0, 1
for _ in range(n):
dp_0, dp_1 = dp_1, dp_0 + dp_1
return dp_0 % 1000000007