青蛙跳台阶,变态跳台阶问题
2016-06-08 10:20
260 查看
一、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
假设,一级台阶,有f(1)种方法,二级有f(2)种,以此类推,n级有f(n)种方法。
可以看出,f(1)=1;f(2)=2。
那么,假设n级台阶,那么第一步就有两种情况,跳一步,跟跳两步。
情况一:跳一步,那么接下去的就是f(n-1);
情况二:跳两步,那么接下去的就是f(n-2)。
所以总数是f(n)=f(n-1)+f(n-2)。
介绍一种复杂度更低的一种办法从下往上算,首先根据f(1)和f(2)计算出f(3),再根据f(2)和f(3)计算出f(4)…..一次类推计算出第n项。很容易理解这种思路的时间复杂度是O(n).实现的代码如下:
二、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
实现的代码如下:
假设,一级台阶,有f(1)种方法,二级有f(2)种,以此类推,n级有f(n)种方法。
可以看出,f(1)=1;f(2)=2。
那么,假设n级台阶,那么第一步就有两种情况,跳一步,跟跳两步。
情况一:跳一步,那么接下去的就是f(n-1);
情况二:跳两步,那么接下去的就是f(n-2)。
所以总数是f(n)=f(n-1)+f(n-2)。
介绍一种复杂度更低的一种办法从下往上算,首先根据f(1)和f(2)计算出f(3),再根据f(2)和f(3)计算出f(4)…..一次类推计算出第n项。很容易理解这种思路的时间复杂度是O(n).实现的代码如下:
int jumpFloor(int number) { if(number<=0)return; if(number==1)return 1; if(number==2)return 2; int jumpone=2; int jumptwo=1; int jumpn=0; for(int i=3;i<=number;i++){ jumpn=jumptwo+jumpone; jumptwo=jumpone; jumpone=jumpn; } return jumpn;
二、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
实现的代码如下:
int jumpFloorII(int number) { int count=0; if(number<=0) return count; else if(number==1) return 1; else if(number==2) return 2; else{ for(int k=1;k<=number-1;k++) count+=jumpFloorII(number-k); count++; } return count;
相关文章推荐
- 跳台阶问题
- 青蛙跳台阶(2XN骨牌问题)
- 九度1389 剑指offer 变态跳台阶
- 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法
- 斐波那契数列(递归与循环的区别)
- 【剑指Offer面试编程题】题目1388:跳台阶--九度OJ
- 【剑指Offer面试编程题】题目1389:变态跳台阶--九度OJ
- 【剑指offer】变态跳台阶
- 青蛙跳台阶问题
- 斐波那契数列、跳台阶、变态跳台阶、矩形覆盖
- 跳台阶问题-java
- 【九度oj】1387 1388 1389 1390 斐波那契数列
- 算法习题27:跳台阶问题
- 剑指offer 跳台阶
- 剑指offer(7)-斐波那契数列
- 青蛙跳台阶问题
- 变态跳台阶
- 跳台阶
- 青蛙跳台阶问题(非变态版)
- 青蛙跳台阶问题