剑指offer——变态跳台阶

目录

题目

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

题解

  1. 思路:这是一道可以递归,记忆化递归,动态规划,递推思想的题目。
    跳1级:毫无疑问就1种跳法 j1 = 1
    跳2级:可以分为 先跳1级剩1级、跳2级两种情况,第一种情况先跳1级剩1级,那么跳法就为跳1级的跳法。 j2 = j1 + 1
    跳3级:可以分为 先跳1级2级、先跳2级剩1级、和跳3级三种情况,第一种情况先跳1级剩2级,那么跳法就为跳2级的跳法, 第二种情况先跳2级剩1级,那么跳法就为跳1级的跳法. j3 = j2 + j1 + 1
    依此类推 。。。。。。。。。。
    跳4级:j4 = j3 + j2 + j1 + 1
    跳5级:j5 = j4 + j3 + j2 + j2 + j1
  • 公式优化
    跳1级:j1 = 1 ------->j1 = 2^0
    跳2级:j2 = j1 + 1 -------> j2 = j1 + j1 -------> j2 = 2 * j1 ------->j2 = 2^1
    跳3级:j3 = j2 + j1 + 1 ------->j3 = j2 + j2 -------> j3 =2 * j2 ------->j3 = 2^2
    跳4级:j4 = j3 + j2 + j1 + 1 -------> j4 = j3 + j3 -------> j4 =2 * j3 ------->j4 = 2^3
    跳n级:jn = jn-1 + jn-2 + … + j3 + j2 + j1 + 1 ------->jn = jn-1 + jn-1 ------->jn =2 * jn-1 ------->5 = 2^n-1
  1. 代码
public static int jumpFloorII(int target) {
        int result = 1;
        for (int i = 1; i < target; i++) {
            result = result << 1;
        }
        return result;
    }
  1. 结果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值