先模拟了1、2、3、4、5个台阶能有多少种跳法,找规律,f(n)=f(n-1)+f(n-2)
首先是递归,递归最重要的是找到出口,即跳出递归的条件,那就是一个台阶的时候只有1种跳法
public class Solution {
public int jumpFloor(int target) {
if(target<=1)return 1;
return jumpFloor(target-1)+jumpFloor(target-2);
}
}
递归是往下找到出口,再往上收拢,而且有重复计算的地方,这部分时间可以省略,那就将值用数组或map存下来
public class Solution {
static int[] f = new int[50];
public int jumpFloor(int target) {
if(target<=1)return 1;
if(f[target]>0)return f[target];
return f[target] = jumpFloor(target-1)+jumpFloor(target-2);
}
}
不考虑递归,直接循环也挺好的,值存入数组中
public class Solution {
static int[] f = new int[50];
public int jumpFloor(int target) {
f[0]=1;
f[1]=1;
for(int i=2;i<=target;i++)f[i]=f[i-1]+f[i-2];
return f[target];
}
}
宇宙的尽头是数学吧。。 只用2个变量存储
public class Solution {
static int[] f = new int[50];
public int jumpFloor(int target) {
int a=1,b=1,c=1;
for(int i=2;i<=target;i++){
c=a+b;a=b;b=c;
}
return c;
}
}