演算法學習記錄八(C++)--->一句程式碼搞定變態跳臺階
基本跳臺階問題
- 一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
解法一(遞迴)
對於本題,前提只有 一次 1階或者2階的跳法。
- a.如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n-1個臺階,跳法是f(n-1);
- b.假定第一次跳的是2階,那麼剩下的是n-2個臺階,跳法是f(n-2)
- c.由a\b假設可以得出總跳法為: f(n) = f(n-1) + f(n-2)
- d.然後通過實際的情況可以得出:只有一階的時候 f(1) = 1 ,只有兩階的時候可以有 f(2) = 2
- e.可以發現最終得出的是一個斐波那契數列:
class Solution {
public:
int jumpFloor(int number) {
if(number <= 0){
return -1;
}
else if(number == 1){
return 1;
}
else if(number == 2){
return 2;
}
else{
return jumpFloor(number-1) + jumpFloor(number-2);
}
}
};
看下執行時間
解法二(迭代)
f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, 可以總結出f(n) = f(n-1) + f(n-2)的規律,但是為什麼會出現這樣的規律呢?假設現在6個臺階,我們可以從第5跳一步到6,這樣的話有多少種方案跳到5就有多少種方案跳到6,另外我們也可以從4跳兩步跳到6,跳到4有多少種方案的話,就有多少種方案跳到6,其他的不能從3跳到6什麼的啦,所以最後就是f(6) = f(5) + f(4);
class Solution {
public:
int jumpFloor(int number) {
if(number <= 0){
return 0;
}
if(number == 1){
return 1;
}
if(number == 2){
return 2;
}
int first = 1;
int second = 2;
int third = 0;
for(int i = 3;i<=number;i++){
third = first + second;
first = second;
second = third;
}
return third;
}
};
很顯然,遞迴更加耗時而且更加佔用記憶體
變態跳臺階問題描述
- 一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
分析
只是一個數學問題罷了,你隨便推一下就能推出
f(n) = 2*f(n-1)
2^(n-1)
程式碼
class Solution {
public:
int jumpFloorII(int number) {
return 1<<--number;
}
};
一句話搞定!!!
相關文章
- 劍指offer 變態跳臺階
- 劍指offer 9 變態跳臺階
- 學習VIORB程式碼記錄ORB
- c++學習記錄C++
- C++學習記錄1C++
- java學習記錄第八週Java
- ios一句程式碼搞定螢幕旋轉iOS
- git高階命令學習記錄Git
- day 1 c++小白學習記錄C++
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- 【Java筆記】十分鐘搞定常用的八種排序演算法與程式碼實現Java筆記排序演算法
- (CSS學習記錄):CSS高階技巧CSS
- 跳臺階
- 《演算法圖解》學習記錄演算法圖解
- C++學習筆記,知識點+程式碼測試C++筆記
- 變數與常量 - Go 學習記錄變數Go
- Swift – 一句程式碼搞定button圖片和文字佈局Swift
- shell指令碼程式設計學習筆記——變數指令碼程式設計筆記變數
- (一)《SQL進階教程》學習記錄--CASESQL
- Git 學習記錄之演變歷史Git
- 學習記錄|Socket程式設計程式設計
- (二)《SQL進階教程》學習記錄--GROUP BY、PARTITION BYSQL
- 前端學習程式碼目錄存放前端
- Mudo C++網路庫第八章學習筆記C++筆記
- 演算法學習---歸併演算法簡單記錄演算法
- 程式設計學習打卡記錄貼程式設計
- 演算法學習筆記1語法 (C++組)演算法筆記C++
- 學習記錄
- Python學習筆記—程式碼Python筆記
- spark學習筆記--進階程式設計Spark筆記程式設計
- Javascript高階程式設計 學習筆記JavaScript程式設計筆記
- 程式碼記錄
- 直接插入演算法的學習記錄演算法
- 爬蟲學習日記(八)爬蟲
- JavaScript學習筆記(八)—— 補JavaScript筆記
- 關於PHP_CodeSniffer程式碼檢測引數學習記錄PHP
- 【每日學習記錄】使用錄影裝置記錄每天的學習
- Python進階學習之程式碼閱讀Python
- 劍指offer——跳臺階