题解 | 跳台阶

跳台阶

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

class Solution {
public:
    int jumpFloor(int number) {
        if (number <= 0) return 0; // 边界条件
        if (number == 1) return 1; // 1 级台阶只有 1 种跳法
        if (number == 2) return 2; // 2 级台阶有 2 种跳法

        int prev1 = 1; // dp[i - 1]
        int prev2 = 2; // dp[i - 2]
        int result = 0;

        for (int i = 3; i <= number; ++i) {
            result = prev1 + prev2; // dp[i] = dp[i - 1] + dp[i - 2]
            prev1 = prev2;          // 更新 dp[i - 1]
            prev2 = result;        // 更新 dp[i - 2]
        }

        return result;
    }
};

第n级台阶的方法数加上第n+1级台阶的方法数等于第n+2级台阶的方法数(能够一部到达第n+2级台阶的台阶只有下面的两阶,采用动态递归可以减小空间复杂度)

考虑问题还可以逆向思考,f(n)=f(n-1)+f(n-2),在从n到1,2的过程会多层调用,但从1,2相加到n可以每一次释放掉n-2的部分,循环更新,保证不占用过多空间资源。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
投递长鑫存储等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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