1. 程式人生 > >劍指offer演算法-----青蛙跳臺階

劍指offer演算法-----青蛙跳臺階

積沙成塔

題目描述:一隻青蛙一次可以跳上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;
    }