题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解法1:容易想到的,递归,缺点有较多的重复计算
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);
}
}
}
————————————————
解法二:改进。使用数组存放之前每一阶的最多跳法,当到第n阶的时候,要么是从n-1跳上来的要么是n-2跳上来,我们只要知道n-1和-2的最多跳法加起来就是当前这一阶最多跳法。动态规划的思想
public class Solution {
public int JumpFloor(int target) {
int[] opt = new int[target+1];
opt[0]=1;
opt[1]=2;
for(int i=3;i<=target;i++){
opt[i-1]=opt[i-2]+opt[i-3];
}
return opt[target-1];
}
}
解法3:迭代
public class Solution {
public int JumpFloor(int target) {
if (target == 1||target == 2)
return target;
int fn1 = 1;
int fn2 = 2;
while (target > 2) {
fn1 += fn2;
fn2 = fn1 - fn2;
target--;
}
return fn1;
}
}
————————————————
版权声明:本文为weixin_43232423原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。