JZ09-变态跳台阶

跳台阶扩展问题

https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

class Solution {

    //递推公式+递归 f(n) = 2 * f(n-1)
    public int JumpFloorII(int target) {
        if(target<0){
            return -1;
        }
        if(target <= 2){
            return target;
        }
        return 2*JumpFloorII(target - 1);
    }

    //递推公式 + 变量
    public int JumpFloorII2(int target) {
        if(target<0){
            return -1;
        }
        if(target <= 2){
            return target;
        }
        int b = 0;
        int a = 2;
        for (int i = 2; i < target; i++) {
            b = a << 1;
            a = b;
        }
        return b;
    }

    //动态规划。开辟数组
    public int JumpFloorII4(int target) {
        if (target < 0) {
            return -1;
        }

        if (target <= 2) {  //测试用例如果输入1,2直接返回
            return target;
        }

        int[] temp = new int[target + 1];
        temp[0] = 1;  //0个台阶,可以跳0阶 也算一种情况
        temp[1] = 1;
        temp[2] = 2;
        for (int i = 3; i <= target; i++) {
            for (int j = 0; j < i; j++) {
                temp[i] += temp[j]; //把i前面的全加起来等于i
            }
        }
        return temp[target];  //0-target 数组长度为target+1
    }

    //利用数组
    public int JumpFloorII3(int target) {
        if(target<0){
            return -1;
        }
        if(target <= 2){
            return target;
        }
        int b = 0;
        int a = 2;
        for (int i = 2; i < target; i++) {
            b = a << 1;
            a = b;
        }
        return b;
    }
}

全部评论

相关推荐

迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务