题解 | #跳台阶扩展问题#
跳台阶扩展问题
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的情况,不考虑
顺丰集团工作强度 376人发布