一只青蛙一次可以跳上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)。
其实还是斐波那契数列
迭代的思路:
public int JumpFloor(int target) {
if (target < 0) return 0;
int[] fib = {0, 1, 2};
if (target < 3)
return fib[target];
int total=0;
int firstElem=1;
int secondElem=2;
for(int i=3;i<=target;i++){
total=firstElem+secondElem;
firstElem=secondElem;
secondElem=total; //迭代
}
return total;
}