解法一:暴力破解

public class Solution {
    public int JumpFloorII(int target) {
        if(target<3) return target;
        int[] ans=new int[target+1];
        ans[1]=1; ans[2]=2;
        for(int i=3; i<target+1; i++){
            for(int j=1; j<i; j++){
                ans[i]+=ans[j];
            }
            ans[i]++;
        }
        return ans[target];
    }
}

解法二:减少中间值

public class Solution {
    public int JumpFloorII(int target) {
        if(target<3) return target;
        int sum=3;
        for(int i=3; i<target; i++){
            int res=sum+1;
            sum+=res;
        }
        return sum+1;
    }
}

解法三:移位

public class Solution {
    public int JumpFloorII(int target) {
        if(target==0||target==1) return 1;
        int a=1;
        for(int i=1; i<target; i++){
            a<<=1;
        }
        return a;
    }
}

解法四:公式法

public class Solution {
    public int JumpFloorII(int target) {
        if(target==0||target==1) return 1;
        return (int) Math.pow(2, target-1);
    }
}