您的位置:首页 > 其它

青蛙跳台阶,变态跳台阶问题

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).实现的代码如下:

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息