刷leetcode 7 斐波那契數列

2021-10-12 01:18:48 字數 1096 閱讀 8318

寫乙個函式,輸入 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。

還是先用老辦法,用乙個陣列存放每一項的值?

class

solution

//n是從0開始的。所以陣列長度是n+1

int[

] arr =

newint

[n+1];

arr[0]

=0; arr[1]

=1;//給陣列的每一項賦值

for(

int i=

2; i1; i++

)//返回第n項

return arr[n];}

}

時間複雜度:o(n)

空間複雜度:o(n)

參照了leetcode的官方題解。

我們只需要得到第n項。第n項是由前兩項相加得到的。我們只需要在數列中從頭開始兩兩向後移動計算,中間的那些數不用專門儲存下來。可以節省空間複雜度。

class

solution

if(n ==1)

//2.設兩個變數不停向前移動

int a =0;

int b =1;

//3.不斷後移

//這是前兩個變數相加在一起的和

int sum =1;

//n=1時,相加後a向後移動一位,正好是第1個元素

//n=2時,相加後a移動,正好是第2個元素

//n=n時,相加後a移動,正好是第n個元素

for(

int i=

0; i)//4.返回a

return a;

}}

時間複雜度:o(n)。for迴圈計算sum

空間複雜度:常量大小的額外空間,o(1)

斐波那契數

入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...

斐波那契數

斐波那契數列 fibonacci sequence 簡介 斐波那契數列 fibonacci sequence 又稱 分割 數列 因 數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 ...

斐波那契數

遞迴演算法是不可取的。由於效率非常低,並且還有棧溢位的風險。應該使用例如以下的迭代解法 int fibonacci unsigned int n if n 1 int i 0,j 1,m unsigned int k for k 2 k n k return m 可是對於這題來說。上面的 還是不行的...