寫乙個函式,輸入 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 可是對於這題來說。上面的 還是不行的...