一、题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
二、解题思路
一级:1 (1种)
二级:1+1,2 (2种)
三级:1+1+1,2+1,1+2 (3种)
四级:1+1+1+1,2+1+1,1+2+1,1+1+2,2+2 (5种)
…
如上不难看出是一个斐波那契数列。
问题也可以理解为青蛙要跳上n级,根据最后一步分为两种情况:
1)在跳上n-1级的基础上再跳1级;
2)在跳上n-2级的基础上再跳2级。
所以就是跳上n-1级和n-2级的跳法种数和。
因为递归方法计算的时间复杂度是以n的指数的方式递增的。所以用单纯的循环,创建一个ArrayList,将每次的JumpFloor(n)值记录。
三、编程实现
import java.util.ArrayList;
public class Solution {
public int JumpFloor(int target) {
// if (target <= 2) {
// return target;
// }
// return JumpFloor(target - 1) + JumpFloor(target - 2);
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= target; i++) {
if (i <= 2) {
list.add(i);
} else {
list.add(list.get(i - 2) + list.get(i - 3));
}
}
return list.get(list.size() - 1);
}
}