一、一只青蛙一次可以跳上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;