思路
根据原题描述,第n级台阶,只能是由第n-1级跳一层跳上或由n-2级跳两层跳上,可以得到公式:f(n)=f(n-1)+f(n-2)。 直接写递归即可,注意递归边界。
但是,考虑到轻易不要使用递归的原则,分析得到的公式,很显然,这是一个斐波那切数列的形式,因此直接使用循环求解即可。
递归解法:
class Solution {
public:
int jumpFloor(int number) {
if(number <= 2)
return number;
else
return jumpFloor(number-1) + jumpFloor(number -2);
}
};
非递归循环解决:
public class Solution {
public int JumpFloor(int target) {
if (target <= 1) {
return 1;
}
// a 表示第 f[i-2] 项,b 表示第 f[i-1] 项
int a = 1, b = 1, c = 0;
for (int i = 2; i <= target; i++) {
c = a + b; // f[i] = f[i - 1] + f[i - 2];
// 为下一次循环求 f[i + 1] 做准备
a = b; // f[i - 2] = f[i - 1]
b = c; // f[i - 1] = f[i]
}
return c;
}
}