题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
初步解题思路:这题与斐波那契数列有点类似。跳到第n个台阶,只有两种可能:1.从第n-1个台阶跳1个台阶,2.从第n-2个台阶跳2个台阶。所以只需要求出跳到第n-1个台阶和第n-2个台阶的所有可能跳法即可。设F(n)为第n个台阶的跳法,则F(n) = F(n-1) + F(n-2),这就是斐波那契数列,所以可以选择递归来做。
最优解:递归会造成栈溢出,所以进一步我们选择使用动态规划,自底向上,保存先计算的值。
java初步解题
public class Solution {
public int JumpFloor(int target) {
if(target<=2)
return target;
else
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
最优解
public class Solution {
public int JumpFloor(int target) {
if(target<=2)
return target;
int f1 = 1;
int f2 = 2;
int f3 = 3;
for(int i=3;i<=target;i++){
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
}