劍指offer演算法-----青蛙跳臺階
阿新 • • 發佈:2019-01-09
積沙成塔
題目描述:一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
演算法分析與實現:
由於每次只能跳一階或者兩階,所以存在兩種情況,當在最後一跳跳了兩階的話,則條n節和跳n-2階的跳法相同,如果最後一跳跳一階則跳n節和跳n-1階的跳法相同。所以根據分類加法的原則的f(n)=f(n-1)+f(n-2)
public class QWJump { public int JumpFloor(int target) { if(target==1) return 1; if(target==2) return 2; int floorone=1; int floortwo=2; int result=0; for(int i=3;i<=target;i++){ result=floorone+floortwo; floorone=floortwo; floortwo=result; } return result; } }
題目描述:一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
分析與實現:由於每次可以跳1~n階,也就是說這隻牛逼的青蛙可以從任何一個臺階一次跳到最高階。所以他有可能和n-1,n-2,n-3......1的跳法相同。同理的如下解析式:
F(n) = F(n-1)+F(n-2)+...+F(1)
F(n-1) = F(n-2)+F(n-3)+...+F(1)
兩個式子相減,很容易得出F(n)=2F(n-1)。有解析式我們可以看出,這可以用遞迴來實現。
public int JumpFloorII(int target) { int result=0; if(target==0){ result=0; }else if(target==1) { result=1; }else{ result=2*JumpFloorII(target-1); } return result; }