文章目录
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
解法一:递归暴力破解
public class Solution {
public int JumpFloor(int target) {
if (target==1){
return 1;
}
else if (target==2){
return 2;
}
else {
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
}
解法二:
递归的思想是自顶向下的,Fn的求解基于Fn-1和Fn-2,Fn-1的求解又基于Fn-2和Fn-3等等依次类推。而现在我们可以反过来,自底向上,在已知F1 = 1,F2 = 1的情况下求解F3,再利用F3和F2求解F4直到求出Fn。即不使用递归,使用循环迭代的方式。相比于解法1,优化后的算法运行时间只有39ms。
public class Solution {
public int JumpFloor(int target) {
if (target==1){
return 1;
}
int l = 1, n = 2;
for (int i = 2; i < target; i++) {
n = l + n;
l = n - l;
}
return n;
}
}