题解 | 跳台阶

跳台阶

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param number int整型 
     * @return int整型
     */
    int jumpFloor(int number) {

        if (number == 1) {
            return 1;
        }

        if (number == 2) {
            return 2;
        }

        int NminOne = 2;
        int NminTwo = 1;
        int N = 0;
        
        for (int i=3; i<=number; ++i) {
            N = NminOne + NminTwo;
            NminTwo = NminOne;
            NminOne = N;
        }
        return N;
    }
};

转化成fibonacci问题(动态规划):n级台阶跳法看成n的函数f(n),当n>2时, f(n) = f(n-1) + f(n-2);

注意2个点:

1)和fibonacci数列不一样,起点不是f(0),而是f(1);

2)要实现时间复杂度O(n),空间O(1)需要自下往上求,而不是递归的自上往下;

3)循环的边界条件:首先起始是i=3,其次推出条件是i<=number;这点可以根据如下推演:

f(4) = f(3) + f(1)

f(3) = f(2) +f(1)

全部评论

相关推荐

浅白lw:其实是牛马自己换马了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务