思路
递归重复子分支和函数栈调用影响效率。
计算前6项观察规律:0:0,1:1,2:2,3:3,4:5,5:8
数列呈斐波那契数列规律。
最终解是由前面的解累积而成:
若楼梯阶级 n = n
跳 2 步到 n:剩下的是第 n - 2 步没跳,起始跳到第 n - 2 步设它为 pre2 种
跳 1 步到 n:剩下的是第 n - 1 步没跳,起始跳到第 n - 1 步设它为 pre1 种
dp(i) = dp(i-2) + dp(i-1)
时间复杂度O(n),空间复杂度O(1)。
递归代码
public class Solution {
public int JumpFloor(int target) {
if(target < 0) return 0;
if(target == 0) return 1;
return JumpFloor(target-1) + JumpFloor(target-2);
}
}
斐波那契循环
public class Solution {
public int JumpFloor(int target) {
if(target < 3) return target;
int f1 = 1, f2 = 2, tmp = 0;
for(int i = 2; i < target; i++) {
tmp = f1 + f2;
f1 = f2;
f2 = tmp;
}
return f2;
}
}