思路

根据原题描述,第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;
    }
}