爬楼梯的通用模板,n 阶楼梯最大跨 m 步
作者:
罗马驾校罗师傅
,
2022-01-17 15:05:13
,
所有人可见
,
阅读 189
def ladder(total, step):
assert total > 0
assert step > 0
h = {}
# 走完脚力范围内一次性可以走完的阶梯,获得迭代的基础
for i in range(1, step + 1, 1):
h[i] = sum([h[x] for x in range(1, i)]) + 1
# 对不能一次走完的阶梯进行迭代
for i in range(step + 1, total + 1, 1):
# temp 是新的阶梯可能走的次数
temp = sum([h[x] for x in range(1, step + 1)])
# 挤占掉最小的一次阶梯 e.g.
# 1 2 4 ->
# 2 4 7 ->
# 4 7 13
# 循环用 step 个空间
for j in range(1, step):
h[j] = h[j + 1]
h[step] = temp
# 兼容 total < step 的情况
print(h[step] if total > step else h[total])
ladder(15, 3)