一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:假设有n个台阶,res种跳法,n=1 res = 1; n=2,res=2; n=3.res =3; n=4,res =5; 排列组合一个一个试过了。明显是个斐波那契数列,这里i从3开始。
迭代法。
//跳一和两个。
public class Solution {
public int JumpFloor(int target) {
if (target == 1 || target == 2)
return target;
int res = 0;
int a = 1;
int b = 2;
for(int i = 3; i <= target; i++){
res = a + b;
a = b;
b = res;
}
return res;
}
}
递归法
public class Solution {
public int JumpFloor(int target) {
if (target == 1 || target == 2)
return target;
return JumpFloor(target -1) + JumpFloor(target - 2);
}
}
跳一个、两个也可以跳三个
如果是一阶楼梯,就是1步,如果是二阶楼梯就是1步或者2步即2种方法,如果是三阶楼梯就是1 1 1、 1 2、 2 1、3四种方法,那么到了四阶我们就知道,就是可以从1或者2或者3处直接到4,那么就是fun( 1 ) + fun( 2 ) + fun(3 )。斐波那契变体。
递归法
public class Solution {
public int JumpFloor(int target) {
//控制target为负值的情况
if(target <=0){
return 0;
}
if (target == 1 || target == 2 )
return target;
if(target ==3){
return 4;
}
return JumpFloor(target -1) + JumpFloor(target - 2) + JumpFloor(target -3);
}
}