劍指offer 10-1 斐波那契數列

題目鏈接
題目描述
寫一個函數,輸入 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

–>f(5)=5,表明斐波那契數列從第0項開始

題解鏈接

動態規劃法
思想:利用輔助變量 sum使 a,b兩數字交替前進
注意:需要弄清最後返回的是哪個值

class Solution {
    public int fib(int n) {
       int a = 0;
       int b = 1;
       int sum = 0;
       for(int i=0; i<n; i++){
           sum = (a+b)%1000000007;
           a = b;
           b = sum;
       }
       return a;
    }
}

記憶化遞歸法
在遞歸法的基礎上,新建一個長度爲 n的數組,用於在遞歸時存儲 f(0)至 f(n)的數字值,重複遇到某數字則直接從數組取用,避免了重複的遞歸計算。
注意:返回的是dp[n]還是dp[n-1]

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