劍指 Offer 10 I 斐波那契數列

2021-10-08 15:42:36 字數 1442 閱讀 7534

題目描述:

寫乙個函式,輸入 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(4)=f(3)+f(2)的時候,計算過程中f(2)重複計算了兩次,因為f(3)=f(2)+f(1)。遞迴是將乙個問題劃分成多個子問題求解,動態規劃也是如此,但是動態規劃會把子問題的解快取起來,從而避免重複求解子問題,因此這道題可以使用乙個int陣列int f,在計算過程中不斷儲存之前的計算好的結果。這種解法的時間複雜度是o(n),空間複雜度也是o(n)

由於只需要得到f[n]的結果,而f[n]=f[n-1]+f[n-2],也就是在計算f[n]的時候只需要知道f[n-1]f[n-2],因此不需要開闢乙個int陣列來儲存所有的計算結果,只需要兩個臨時變數pre1pre2來儲存計算f[n]時所需要的f[n-2]f[n-1]即可,這樣空間複雜度可以降為o(1)

實現**:

public

intfib

(int n);if

(n <2)

return res[n]

;int pre1 =0;

int pre2 =1;

int num =0;

for(

int i =

2; i <= n; i++

)return num;

}public

intfib1

(int n)

return num[n]

;}

劍指 Offer 10 I 斐波那契數列

劍指 offer 10 i.斐波那契數列 寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 ...

劍指 Offer 10 I 斐波那契數列

題目鏈結 題目描述 1.寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是由之前的兩數相加而得出。答案需要取模 1e9 7 100...

劍指 Offer 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 如計算初...