乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
數列:f(n)=1(n=1)
2(n=2)
f(n-1)+f(n-2)
public class solution else
return jumpfloor(target-1)+jumpfloor(target-2);
}}
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
f(n)=1(n=0)
1(n=1)
f(n-1) *2
public class solution else
return 2*jumpfloorii(target-1);
}}
我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?
依舊是斐波那契數列
2*n的大矩形,和n個2*1的小矩形
其中target*2為大矩陣的大小
有以下幾種情形:
1⃣️target <= 0 大矩形為<= 2*0,直接return 1;
2⃣️target = 1大矩形為2*1,只有一種擺放方法,return1;
3⃣️target = 2 大矩形為2*2,有兩種擺放方法,return2;
4⃣️target = n 分為兩步考慮:
第一次擺放一塊 2*1 的小矩陣,則擺放方法總共為f(target - 1)
第一次擺放一塊1*2的小矩陣,則擺放方法總共為f(target-2)
public class solution
else if(target==1)
else if(target==2)
else
return rectcover(target-1)+rectcover(target-2);
}}
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。
n<=39
這個題可以說是迭代(iteration) vs 遞迴(recursion),
f(n) = f(n-1) + f(n-2),第一眼看就是遞迴啊,簡直完美的遞迴環境,遞迴肯定很爽,這樣想著關鍵**兩三行就搞定了,注意這題的n是從0開始的: 1
2
if
(n<=
1
)
return
n;
else
return
fibonacci(n-
1
)+fibonacci(n-
2
);
然而並沒有什麼用,測試用例裡肯定準備著乙個超大的n來讓stack overflow,為什麼會溢位?因為重複計算,而且重複的情況還很嚴重,舉個小點的例子,n=4,看看程式怎麼跑的:
fibonacci(4) = fibonacci(3) + fibonacci(2);
= fibonacci(2) + fibonacci(1) + fibonacci(1) + fibonacci(0);
= fibonacci(1) + fibonacci(0) + fibonacci(1) + fibonacci(1) + fibonacci(0);
由於我們的**並沒有記錄fibonacci(1)和fibonacci(0)的結果,對於程式來說它每次遞迴都是未知的,因此光是n=4時f(1)就重複計算了3次之多。
那麼如何求解呢,動態規劃似乎不錯,關於動態規劃三個條件:最優子結構、無後效性、子問題重疊這些就不談了,因為理(wo)論(ye)性(bu)太(tai)強(dong)了。
下例是乙個簡單的動態規劃,以一定的空間代價避免代價更大的重複計算的棧空間浪費: 1
2
3
4
5
6
7
8
9
10
if
(n<=
1
)
int
record =
new
int
[n+
1
];
record[
0
] =
0
;
record[
1
] =
1
;
for
(
int
i=
2
;i<=n;i++)
return
record[n];
雖然看起來很蠢,空間浪費了sizeof(int)*(n-1),但是對於那個超大n的測試用例應該是可以通過了,時間複雜度也達到了o(n)。
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...
迴圈斐波那契數列 斐波那契數列應用
什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...
斐波那契數列
1 題目描述 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。斐波那契數列的定義如下 輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入包括乙個整數n 1 n 70 輸出 對應每個測試案例,輸出第n項斐波那契數列的值。2 這是九度上的乙個題,要求時間限制1秒,整數的...