剑指offer-4:变态条楼梯

##四、变态条楼梯
###题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
###分析
也是斐波那契数列问题,根据上述的思路,可以得到
f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(0),由此就有两种思路解答
(1)接着上式推出=> f(n)=2f(n-1)
(2)通过创建一个数组,进行循环,把f(0)、f(1)、...、f(n-1)的值存入数组中,然后把数组元素的值都相加得到f(n)
###代码
(1)

public class Solution {
    public int JumpFloorII(int target) {
        if(target==0){
            return 0;
            
        }
        if(target==1){
            return 1;
        }
        return 2*JumpFloorII(target-1);
    }
}

(2)

public class Solution {
    public int JumpFloorII(int target) {
        if(target <= 2){
            return target;
        }
        int[] dp = new int[target + 1]; // 0 号不使用
        dp[1] = 1; //跟普通的 pre2 一个意思
        dp[2] = 2; //跟普通的 pre1 一个意思
        for (int i = 3; i <= target; i++){
            for (int j = i - 1; j >= 1; j--){
                dp[i] += dp[j];
            }
            dp[i]++;
        }
        return dp[target];
    }
}

 

posted @ 2019-08-16 10:47  悦风旗下  阅读(181)  评论(0编辑  收藏  举报