题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解法
解法一
f(n)=f(n-1)+f(n-2)+…+f(2)+f(1)
循环递归实现
代码:
class Solution {
public:
int jumpFloorII(int number)
{
if(number==0||number==1)
return 1;
else
{
int sum=0;
for(int i=number;i>0;i--)
sum+=jumpFloorII(number-i);
return sum;
}
}
};
解法二
找规律
a、f(n)=f(n-1)+f(n-2)+…+f(2)+f(1)
b、f(n-1)=f(n-2)+f(n-3)+…+f(2)+f(1)
a-b:f(n)=2f(n-1)
代码:
class Solution {
public:
int jumpFloorII(int number)
{
if(number==0||number==1)
return 1;
else
return 2*jumpFloorII(number-1);
}
};
解法三
不用递归,用临时变量存储前一个值。f(n)=2f(n-1)
class Solution {
public:
int jumpFloorII(int number)
{
if(number==0||number==1)
return 1;
else
{
int temp1=1;
for(int i=1;i<number;i++)
temp1*=2;
return temp1;
}
}
};