《剑指offer》——变态跳台阶
来源:互联网 发布:长歌门捏脸数据 编辑:程序博客网 时间:2024/05/01 04:07
这是《跳台阶》题目的升级版,不止是每步都是1或者2,而是可以从1调到n,求其跳法。
T:
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
constraints:
时间限制:1秒空间限制:32768K
这一题目,虽然只是略微的修改了条件,但其解题方式完全不同。
同时,“青蛙跳台阶”只是一种具体的场景设定,抽象来看,其可看做如下表述:
抽象:
对于一个正整数
即:凡是小于n的正整数可以作为一个加数因子,问总共有多少种此类的表达式?
在我的理解当中,此种类型有2种方式:
隔板法
共有n个球,代表n个台阶,在这里设定每个球的数量值为1。n个球有n-1个空隙。
- 如果插入1个隔板,那就代表只需要2步就可以到达n阶的台阶,类似上图中给出的例子。
- 在插入1个隔板的情况下,如果插入的位置不同,则代表第一步的步长不同,即第一步跳的台阶数不同,也代表了不同的跳台阶方案,所以,可以应用隔板情况下的组合数进行求解。
- 比如插入了
k 个隔板,那么就有⟮n−1k⟯ 种跳跃方式。
因此,可以得到如下结果:
公式推导
设
对于第一步来说,青蛙可以跳1阶,2阶,…,
因此,本题目的实质,就是求一个次幂。
代码:
public int JumpFloorII(int target) { int count = 1; int i = 1; while (i < target) { count *= 2; i ++; } return count; }
还有大神有如下解法:
可大致描述如下:
0 0
- 《剑指offer》——变态跳台阶
- 剑指offer——变态跳台阶
- 剑指offer——变态跳台阶
- 剑指offer——变态跳台阶
- 剑指offer—变态跳台阶
- 《剑指offer》—9、变态跳台阶
- 剑指offer(9)—变态跳台阶
- 剑指offer — 变态跳台阶
- 剑指offer(C++)——变态跳台阶
- 剑指offer(java代码)——变态跳台阶
- 剑指Offer——(9)变态跳台阶
- 剑指offer——9.变态跳台阶
- 算法系列——变态跳台阶(剑指offer)
- 【剑指offer】变态跳台阶
- 【剑指offer】变态跳台阶
- 剑指offer :变态跳台阶
- 剑指Offer-变态跳台阶
- 《剑指offer》变态跳台阶
- Huatuo's Medicine 【水题】
- 集合运算时使用更优雅的方式
- 浅谈Java中的System.out.println()
- 为什么在Java中不使用finalize()方法
- 在EA中将代码导入模型的时候,查看源码出现中文乱码的解决方案
- 《剑指offer》——变态跳台阶
- shell join命令详解(转)
- c++ primer第五版(中文)习题答案 第二章第四节-const限定符
- ajax实现简单的多人聊天
- Mangos源码分析(14):Mangos预编译头文件及模块划分随想
- lua语言中与时间相关的函数总结
- 黑马程序员——C语言指针
- linux常用命令ls
- 密码加盐-Salting password