動態規劃9:變態跳臺問題
題目:
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
思路:
分析可知:如果要上n階臺階,擁有的可能方法數目是:
f(n)=f(n-1)+f(n-2)+f(n-3)+……f(1)+f(0);
於是從前往後計算出各個項的值就可以,在簡單臺階問題中需要保留2個計算結果供後面的計算使用,這裡需要保留每一項的計算結果,可以使用一個陣列來儲存dp[i],但是進一步分析發現可知:
f(n)=f(n-1)+f(n-2)+f(n-3)+……f(1)+f(0);
f(n-1)=f(n-2)+f(n-3)+……f(1)+f(0);
即f(n)=2*f(n-1);
於是只要保留1項結果就可以了,再分析初始值,
f(0)=1;
f(1)=1;
f(2)=2;……
於是f(n)=2^(n-1);
常識:一個整數除以2可以使用向右位移1位來實現,即2>>1=1;一個整數乘以2可以使用向左位移1位來實現,4<<1=8,於是本題中f(n)=2<<(n-2),注意左移動-1並不等價於右移1,於是對n=0,n=1特殊考慮。
注意:答案不要溢位,雖然不用處理但是在面試時要考慮溢位的問題並說明。
- publicclass Solution {
- public int JumpFloorII(int target) {
- //特殊輸入:對於target為0的情況OJ並不關心
- if(target<0) return 0;
- if(target==1) return 1;
- return 2<<(target-2);
- }
- }
相關文章
- 動態規劃之子序列問題動態規劃
- 揹包問題----動態規劃動態規劃
- 【動態規劃】揹包問題動態規劃
- 整數劃分問題(動態規劃)動態規劃
- 動態規劃 01揹包問題動態規劃
- 找零問題與動態規劃動態規劃
- 【動態規劃】01揹包問題動態規劃
- 動態規劃-01揹包問題動態規劃
- 動態規劃,股票問題留坑動態規劃
- 動態規劃篇——揹包問題動態規劃
- 醜數問題——動態規劃、Java動態規劃Java
- (動態規劃)最小分糖果問題動態規劃
- 動態規劃--01揹包問題動態規劃
- 好題——動態規劃動態規劃
- 動態規劃專題動態規劃
- 動態規劃題單動態規劃
- 爬臺階問題(遞迴和動態規劃實現)遞迴動態規劃
- 動態規劃6:臺階問題和矩陣最小路徑問題動態規劃矩陣
- 【動態規劃】01揹包問題【續】動態規劃
- 動態規劃5:找零錢問題動態規劃
- 【動態規劃(一)】動態規劃基礎動態規劃
- 動態規劃練習題動態規劃
- 動態規劃解題方法動態規劃
- 動態規劃做題思路動態規劃
- 動態規劃之股票問題123動態規劃
- 0-1揹包問題(動態規劃)動態規劃
- 動態規劃,這幾個問題最常見!動態規劃
- 動態規劃-最少硬幣組合問題動態規劃
- 動態規劃動態規劃
- 動態規劃 擺花 題解動態規劃
- 做題記錄 --- 動態規劃動態規劃
- 我的動態規劃題單動態規劃
- 矩陣連乘問題 Python 動態規劃矩陣Python動態規劃
- 動態規劃之0,1揹包問題動態規劃
- 動態規劃系列之六01揹包問題動態規劃
- 動態規劃求解最長上升子序列問題動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃
- 迴文串問題(動態規劃DP C++)動態規劃C++