题解 | #跳台阶_简单# | 递归 OR 分析后直接循环解决

跳台阶

http://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4

思路

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

相关推荐

程序员鼠鼠_春招版:都很烂大街,rpc也基本没人问,考研吧,不然就包装一段实习再去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务