题解 | #跳台阶扩展问题#

跳台阶扩展问题

https://www.nowcoder.com/practice/22243d016f6b47f2a6928b4313c85387

class Solution {
public:
    int jumpFloorII(int number) {
        //主要C++吧,反正quiche的rust 也没读过多少源码

        //跳上n级:跳到各个级别,然后一步跳到n 
        //f[n]=sum(f[1]...f[n-1])
        //f[n-1]=sum(f[1]...f[n-2])

        //f[n]=sum(f[n-1]+f[n-1])
        //f[n]=2f[n-1]
        int cur=1;
        for(int i=2;i<=number;i++){
            //if(i=1)    
            cur=cur*2;
        }

        return cur;
    }
};

如果重来应该怎么一步到位?

拆解成众多小规模的问题。跳到n台阶=跳到 1...n-1.然后再分别跳n-1...1步

ways[n]=ways[1]+...+ways[n-1]

注意到,转移方程之中存在可以复用的地方,即跳到n-1台阶的次数等价于∑ways[1]+...+ways[n-2]

因此 ways[n]=ways[n-1]+ways[n-1]

从第一台阶开始网上迭代即可。

注意边界条件n=0的情况,不考虑

全部评论

相关推荐

ALEX_BLX:这华子能怪谁呢,池子泡这么深,每年几乎都是最晚一批开出来的公司,人才早就给抢走了。又不是人人都是博士生
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务