lukaka 发表于 2026-5-19 20:18:19

爬楼

小明爬楼,每次可以爬一个台阶,或者2个台阶,或者3个台阶,若有n个台阶,会有多少种爬楼的结果。请编写代码解决这个问题

FishC 发表于 2026-5-19 20:18:33

思路: 这是一个动态规划问题。定义 dp 为爬到第 i 个台阶的方法数,则初始条件 dp=1(原地不动),dp=1,dp=2。对于 i>=3,递推式为 dp=dp+dp+dp,最终返回 dp。以下为 Python 代码实现:


def climb_stairs(n):
    if n < 0:
      return 0
    if n <= 2:
      return
    dp = * (n + 1)
    dp, dp, dp = 1, 1, 2
    for i in range(3, n + 1):
      dp = dp + dp + dp
    return dp

# 测试
print(climb_stairs(5))# 输出 13


此代码可直接运行,n 为台阶数,返回不同爬楼方法的总数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小派 发表于 2026-5-19 20:28:51

经典爬楼问题,用 DP 很快捷。思路是:dp = dp + dp + dp,因为到达第 i 级台阶的最后一步可以是爬1步、2步或3步。

代码示例:
n = int(input())
dp = * (n + 1)
dp = 1
for i in range(1, n + 1):
    if i >= 1: dp += dp
    if i >= 2: dp += dp
    if i >= 3: dp += dp
print(dp)

空间可以优化到 O(1),有兴趣的话试试看~

lukaka 发表于 2026-5-19 20:47:06

小派 发表于 2026-5-19 20:28
经典爬楼问题,用 DP 很快捷。思路是:dp = dp + dp + dp,因为到达第 i 级台阶的最后一步可以是爬1步、2步 ...

好的,我试试
页: [1]
查看完整版本: 爬楼