JAVA劍指offer編程練習:跳臺階和變態跳臺階(遞歸)

1.跳臺階
(1)題目
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
(2)解題思路
相當於斐波那契序列,跳1級臺階,只有1種方法;跳2級臺階,有2種方法;跳3級臺階,有3種方法;跳4級臺階,有5種方法,依次下去,跳一個n級的臺階的方法數是跳n-1級臺階的方法數與跳n-2階臺階的方法數的總和。
(3)代碼

public class Solution {
    public int JumpFloor(int target) {
        if(target<=0){
            return 0;
        }
        if (target>0&&target<=3){
            return target;
        }
        return JumpFloor(target-1)+JumpFloor(target-2);
    }
}

2.變態跳臺階
(1)題目:一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
(2)解題思路
當跳1級臺階時,f(1) = 1;
當跳2級臺階時,f(2) = f(1) + 1 = 2;
當跳3級臺階時,f(3) = f(2) + f(1) + 1 = 4;
當跳4級臺階時,f(4) = f(3) + f(2) + f(1) + 1 = 8;
以此類推:
f(n) = f(n-1) + f(n-2) +…+ f(2) + f(1) + 1
f(n-1) = f(n-2) +…+ f(2) + f(1) + 1
做減法:
–> f(n) - f(n-1) = f(n-1)
–>f(n) = 2 * f(n-1)
(3)代碼

public class Solution {
    public int JumpFloorII(int target) {
        if(target<=0){
            return 0;
        }
        if (target==1){
            return 1;
        }
        return 2*JumpFloorII(target-1);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章