1. 程式人生 > >跳臺階和變態跳臺階

跳臺階和變態跳臺階

n) else if tar 每次 turn public sum == ret

這兩道題比較類似,就放到一塊來了
這兩道題的解題思路我是用的一樣的,都是遞歸求解
當每次只能跳1或2臺階時候,f(n) = f(n-2) + f(n-1),f(1) = 1,f(2) = 2
而當每次可跳1或2或3一直到n臺階時,f(n) = f(n-1) + f(n-2) + ... + 1,同樣 f(1) = 1,f(2) =2


下面貼兩道題的代碼

跳臺階:

public class Solution {
    public int JumpFloor(int target) {
        if(target == 1 || target == 2){
            return target;
        }else if(target > 2){
            return JumpFloor(target-1) + JumpFloor(target-2); 
        }else{
            return -1;
        }
    }
}

變態跳臺階:

public class Solution {
    public int JumpFloorII(int target) {
        /* 這裏可以按照上一題的思路來做
        *  f(n) = f(n-1) + f(n-2) + ... + 1
        *  f(1) = 1, f(2) = 2
        */
        if(target == 1 || target == 2){
            return target;
        }else if(target > 2){
            int sum = 1;
            while(target-1 > 0){
                sum += JumpFloorII(--target);
            }
            return sum;
        }else{
            return -1;
        }
    }
}

進度 12/66

跳臺階和變態跳臺階