一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
问题的起源是斐波那契数,其实就是一个递归方程的推导
我们假设在青蛙跳台阶的过程中,我们从后往前推,假设青蛙跳完n阶有f(n)
如果青蛙最后一步跳1阶,那么之前青蛙跳完了n-1阶,有f(n-1)种跳法
如果青蛙最后一步跳2阶,那么之前青蛙跳完了n-2阶,有f(n-2)种跳法
如果青蛙最后一步跳3阶,那么之前青蛙跳完了n-3阶,有f(n-3)种跳法
...
如果青蛙最后一步跳n-1阶,那么之前青蛙跳完了1阶, 有f(1)种跳法
如果青蛙最后一步跳n阶,那么之前青蛙跳完了n-n阶, 有f(n-n)种跳法
总的就可以表述为:
f(n)=f(0)+f(1)+f(2)+...+f(n-1)
我们会很惊奇地发现
f(0)+f(1)+f(2)+f(3)+...+f(n-2)=f(n-1)
故有:
f(n)=2*f(n-1)
Java代码实现:
迭代:
public class Solution {
public int JumpFloorII(int target) {
if(target==1)
return 1;
int after=1;
while(target-->1){
after=2*after;
}
return after;
}
}
空间换时间:
public class Solution {
public int JumpFloorII(int target) {
if(target==1)
return 1;
int temp[]=new int[target];
temp[0]=1;
for(int i=1;i<target;i++){
temp[i]=2*temp[i-1];
}
return temp[target-1];
}
}