[LeetCode](面試題10 - I)斐波那契數列

題目

寫一個函數,輸入 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

解題思路

基於遞歸的解法雖然直觀,但是效率較低,因此可採用循環迭代的解法,先根據F(0)和F(1)求出F(2),再根據F(1)和F(2)求出F(3),以此類推求出F(n)。

複雜度分析:
時間複雜度:O(n)。
空間複雜度:O(1),僅使用了常數個變量。

注:需要區分取模與取餘運算,Java中’%'是取餘運算,雖然在兩個都是正數的情況下,運算結果也對,但最好還是用取模運算 Math.floorMod。

代碼

class Solution {
    public int fib(int n) {
        if(n<=1){
            return n;
        }
        int f1 = 0;
        int f2 = 1;
        int f = 0;
        for(int i=2; i<=n; i++){
            //f = f1 + f2;
            f = Math.floorMod(f1 + f2, 1000000007);
            f1 = f2;
            f2 = f;
        }
        return f;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章