这道题和跳台阶的思想都差不多,多列举几个数就可以发现规律:

假设dp[i]表示跳到第i层的方法,则

这里又可以想到利用DP的思想建立一个数组保存前i项和:

于是化简可得,省区了dp数组,只保存sum和即可,代码如下:

public class Solution {
    public int JumpFloorII(int target) {
        ArrayList<Integer> sum = new ArrayList<>();
        sum.add(1);
        for(int i=1;i<target;i++){
            sum.add(sum.get(i-1)*2+1);
        }
        if(target == 1) return 1;
        return sum.get(target-2)+1;
    }
}