问题来自牛客网:
一只青蛙一次可以跳上1级台阶,也可以跳上2级。
求该青蛙跳上一个n级的台阶总共有多少种跳法。
假设N阶台阶有f(n)中跳法(n>2),第N可以是从第N-1阶跳上去的也可以是从第N-2阶跳上去的。
所以有f(n)=f(n-1)+f(n-2) 。所以这道题的实质就是斐波那契数列,以下用非递归的方式实现:
/**
*@author luzi
*
/
public int JumpFloor(int target) {
int count=0;
if(target==1){
count=1;
}
else
if(target==2){
count=2;
}
else{
int[] arr=new int[target+2];
arr[0]=1;
arr[1]=2;
for(int i=2;i<target;i++)
arr[i]=arr[i-1]+arr[i-2];
count=arr[target-1];
}
return count;
}
递归方法开销大,不建议使用。
此类题目变形:
一只青蛙一次可以跳上1级台阶,也可以跳上2级,3级......n级
求该青蛙跳上一个n级的台阶总共有多少种跳法。
同样假设第n阶有f(n)种跳法 (n>2) ,则第 n 阶可以是从第n-1阶跳上去的也可以是从 n-2,n-3......,1,0跳上去的
所以 f(n) = f(n-1)+f(n-2)+...+f(1)+f(0)+1.通过分析我们可以知道 f(0)=0;f(1)=f(0)+1;f(2)=f(1)+1;
f(3)=f(2)+f(1)+f(0)+1=4,f(4)=f(3)+f(2)+f(1)+f(0)+1=8,......通过数学分析,可知f(n)=2^(n-1);
代码比较简单,不贴了