nowcoder
求斐波那契數列的第 n 項,n <= 39。
如果使用遞迴求解,會重複計算一些子問題。例如,計算 f(4) 需要計算 f(3) 和 f(2),計算 f(3) 需要計算 f(2) 和 f(1),可以看到 f(2) 被重複計算了。
遞迴是將乙個問題劃分成多個子問題求解,動態規劃也是如此,但是動態規劃會把子問題的解快取起來,從而避免重複求解子問題。
public
intfibonacci
(int n)
考慮到第 i 項只與第 i-1 和第 i-2 項有關,因此只需要儲存前兩項的值就能求解第 i 項,從而將空間複雜度由 o(n) 降低為 o(1)。
public
intfibonacci
(int n)
return fib;
}
由於待求解的 n 小於 40,因此可以將前 40 項的結果先進行計算,之後就能以 o(1) 時間複雜度得到第 n 項的值。
public
class
solution
public
intfibonacci
(int n)
}
LeetCode10 1 斐波那契數列
題目 輸入乙個整數 求斐波那契數列的第 n項。斐波那契數列每一項的值是其前兩項的和 思路1 暴力法 思路2 記憶化搜尋 開乙個大陣列記錄中間結果,如果乙個狀態被計算過,則直接查表,否則再遞迴計算。總共有 n 個狀態,計算每個狀態的複雜度是 o 1 所以時間複雜度是 o n 思路3 遞推 開乙個大陣列...
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...
迴圈斐波那契數列 斐波那契數列應用
什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...