青蛙跳台阶
问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。问题分析
当n=1时,有1种跳法;
当n=2时,有2种跳法;
当n=3时,有3种跳法;
当n=4时,有5种跳法…
容易发现,这些跳法是一个菲波那切数列。
所以直接用斐波那契数列的思想即可。代码实现
//循环方法
class Solution {
public:
int jumpFloor(int number) {
if(number<3) return number;
int first=1,second=2;
int ret;
for(int i=number-2;i>0;i--)
{
ret=first+second;
first=second;
second=ret;
}
return ret;
}
};
//递归方法
class Solution {
public:
int jumpFloor(int number) {
if(number<3) return number;
else return jumpFloor(number-1)+jumpFloor(number-2);
}
};
进阶青蛙跳台阶
问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。问题分析
当n=1时,有1种跳法;
当n=2时,有2种跳法;
当n=3时,有4种跳法;
当n=4时,有8种跳法…
容易发现,跳法=2^(n-1)。代码实现
class Solution {
public:
int jumpFloorII(int number) {
return pow(2,(number-1));
}
};
其中,pow( )函数的返回值是double类型的。
//递归方法
class Solution {
public:
int jumpFloorII(int number) {
if(number<=1) return number;
else return 2*jumpFloorII(number-1);
}
};