[剑指Offer] 9.变态跳台阶
来源:互联网 发布:以色列人工智能武器 编辑:程序博客网 时间:2024/05/29 07:36
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
【思路1】每个台阶都有跳与不跳两种可能性(最后一个台阶除外),最后一个台阶必须跳。所以共用2^(n-1)中情况。
1 class Solution {2 public:3 int jumpFloorII(int number) {4 return 1<<--number;5 //1左移number-1位,即2的number-1次幂6 //return pow(2, number - 1);7 }8 };
【思路2】
关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:
f(1) = 1
f(2) = f(2-1) + f(2-2)
f(3) = f(3-1) + f(3-2) + f(3-3)
...
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n)
由以上可以继续简化:
f(n-1) = f(0) + f(1)+f(2)+f(3) + ... + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)
可以得出:
f(n) = 2*f(n-1)
得出最终结论,在n阶台阶,一次有1、2、...n阶的跳的方式时,总得跳法为:
| 1 ,(n=0 )
f(n) = | 1 ,(n=1 )
| 2*f(n-1),(n>=2)
1 class Solution { 2 public: 3 int jumpFloorII(int number) { 4 int res[100] = {0}; 5 res[0] = 1; 6 res[1] = 2; 7 for(int i = 2;i < number;i ++) 8 res[i] = 2 * res[i - 1]; 9 return res[number - 1];10 }11 };
阅读全文
0 0
- 剑指offer-9.变态跳台阶
- 剑指Offer--9.变态跳台阶
- [剑指Offer] 9.变态跳台阶
- 【剑指offer】变态跳台阶
- 【剑指offer】变态跳台阶
- 剑指offer :变态跳台阶
- 剑指Offer-变态跳台阶
- 《剑指offer》变态跳台阶
- 【剑指Offer】变态跳台阶
- 剑指offer--变态跳台阶
- 剑指offer-变态跳台阶
- 剑指offer 变态跳台阶
- 剑指offer--变态跳台阶
- 《剑指offer》变态跳台阶
- 剑指offer - 变态跳台阶
- 剑指Offer:变态跳台阶
- 《剑指Offer》 变态跳台阶
- 剑指offer--变态跳台阶
- [剑指Offer] 6.旋转数组的最小数字(二分法)
- [剑指Offer] 7.斐波那契数列
- LINUX第一章作业
- [剑指Offer] 8.跳台阶
- tomcat的安装与配置
- [剑指Offer] 9.变态跳台阶
- termios详解
- [剑指Offer] 10.矩形覆盖
- [剑指Offer] 11.二进制中1的个数
- [剑指Offer] 12.数值的整数次方
- [剑指Offer] 13.调整数组顺序使奇数位于偶数前面
- [剑指Offer] 14.链表中倒数第k个结点
- [剑指Offer] 15.反转链表
- 简单总结一下Java和javascript 中对于 josn对象、字符串的处理。