《剑指offer》(九)-变态跳台阶(java)

变态跳台阶

考点:贪心算法

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

代码格式要求

public class Solution {
    public int JumpFloor(int target) {

    }
}

解题一-推导公式

1.思路


image.png

2.代码

public class Solution9 {
    public static int JumpFloor(int target) {
        return (int)Math.pow(2,target-1);
        // return 1<<(target-1);
    }
}

解题二-迭代

1.思路
链接:https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387?answerType=1&f=discussion
来源:牛客网

本质上是斐波那契数列的变种,普通跳台阶是一步与两步,问题规模缩小到分成最后要跳到第 n 阶可以跳两次或者一次去求解,所以,在普通跳台阶,设置两个临时变量存下跳一次或者两次时,前面会有多少种可能的结果

dp 就是可以由什么状态推导出最后的状态,斐波那契数列是由前两种状态,而这里就是由前 n - 1 种状态推导出

这里用同一个套路来分析一下

  • 若楼梯阶级 n = 3

    • 跳 3 步到 3:没有剩下步数没跳的,只有这样一种跳法
    • 跳 2 步到 3:剩下的是第一步没跳,起始跳到第一步只有一种
    • 跳 1 步到 3:剩下的是第二步没跳,起始跳到第二步有两种

    求得,n = 3 时,有 4 种跳法

  • 若楼梯阶级 n = 4

    • 跳 4 步到 4:没有剩下步数没跳的,只有这样一种跳法
    • 跳 3 步到 4:剩下的是第一步没跳,起始跳到第一步只有一种
    • 跳 2 步到 4:剩下的是第二步没跳,起始跳到第二步只有两种
    • 跳 1 步到 4:剩下的是第三步没跳,起始跳到第三步有四种

    求得,n = 4 时,有 8 种跳法

  • 若楼梯阶级 n = n

    • 跳 x 步到 n 有几种的和,跟前 n - 1 种状态有关

那么,设置一个数组即可,在求的过程中把值都暂时放在数组里,最后求的时候遍历数据这些求好的对应的阶级种数之和即为新的下级阶梯种数
2.代码

public class Solution {
    public int JumpFloorII(int target) {
        if (target <= 2) {
            return target;
        }
        int[] dp = new int[target + 1];
        Arrays.fill(dp, 1); //初始化每一种都可以直接从 0 跳到 n
        dp[0] = 0; //从 0 跳到 0 为 0 种,因为 n = 0,没法跳
        for (int i = 2; i <= target; i++) {
            for (int j = i - 1; j >= 1; j--) {
                dp[i] += dp[j]; //第 n 个状态是由前 n - 1 种状态推导出来,就是累加!
            }
        }
        return dp[target];
    }
}

解题三

1.思路


image.png

2.代码

public class Solution9 {
    public static int JumpFloor(int target) {
        int sum = 1;
            if(target == 0)
            return 0;
            for(int i = 1;i < target; i++)
                 sum = 2* sum;
            return sum;
    }   
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目分析 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种...
    BluthLeee阅读 131评论 0 0
  • 题目描述 变态跳台阶 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶...
    一只可爱的柠檬树阅读 121评论 0 0
  • 下午在公交车站遇到两位以前的老邻居,都是八十来岁的奶奶。一番问候寒暄,她们说要去镇上“坐椅子”,一种保健养...
    麦乐地阅读 272评论 1 2
  • 胸锁乳突肌 1、胸锁乳突肌很少被拉伸,因为常常其在被拉伸到之前,其深层的斜角肌和枕下肌由于过短而先拉到了极限。 2...
    厚_德_载_物阅读 894评论 0 3
  • 《狂人日记》读书笔记 2018/2/28 如果你以为鲁迅从来就只是个单纯的战士,那么你大概从来没有读懂过鲁迅(梁文...
    itachi_4948阅读 2,292评论 0 4