题目
青蛙跳1级台阶 有1种跳法,f(1)=1。
青蛙跳2级台阶 有2种跳法,1+1或2(先跳1级,再跳一级,或者直接跳两级),f(2)=2。
青蛙跳3级台阶 有3种跳法,1+1+1或2+1或1+2,f(3)=3
青蛙跳4级台阶 有5种跳法,1+1+1+1或1+2+1或2+1+1或1+1+2或2+2,f(4)=5
……
规律为f(n)=f(n-1)+f(n-2)
如斐波拉契数列
0,1,1,2,3,5,8……
c语言
int jumpFloor(int step)
{
// 0,1,1,2,3,5
int front=0;
int next=1;
int tmp=0;
for(int s=0;s<step;s++)
{
tmp=front+next;
front=next;
next=tmp;
}
return next;
}
c++
int jumpFloor(int step)
{
//f(n)=f(n-1)+f(n-2)
if(step==0) return 1;
if(step==1) return 1;
return jumpFloor(step-1)+jumpFloor(step-2);
}
慢,会超时,需要记忆化搜索。
int f[40]={0};
int jumpFloor(int step)
{
//f(n)=f(n-1)+f(n-2)
if(step==0) return 1;
if(step==1) return 1;
if(f[step]>0) return f[step];
return f[step]=jumpFloor(step-1)+jumpFloor(step-2);
}
python
def jumpFloor(step):
front=0
next=1
for _ in range(step):
front,next=next,front+next
return next