📅  最后修改于: 2023-12-03 15:27:05.392000             🧑  作者: Mango
本题是一道动态规划问题。假设一共有n层楼梯,每次可以爬1层或2层,每层楼梯有一个对应的成本,求到达顶层的最低成本。
我们可以用一个dp数组来记录到达每一层楼梯的最小成本,其中dp[i]表示到达第i层楼梯的最小成本。
第一步是初始化dp数组,根据题目条件,到达第1层和第2层的最小成本就是它们自己的成本。
然后考虑dp[i]的值怎么求解。因为每次可以爬1层或2层,所以到达第i层楼梯的最小成本只能从第i-1层和第i-2层转移过来,而且要选择最小的那个。因此我们可以得到转移方程:
dp[i] = min(dp[i-1], dp[i-2]) + cost[i]
其中cost[i]表示第i层楼梯的成本。
最终的答案就是到达第n层楼梯的最小成本。
def min_cost_climbing_stairs(cost: List[int]) -> int:
n = len(cost)
dp = [0] * (n + 1) # 初始化dp数组
dp[0], dp[1] = cost[0], cost[1] # 到达第1层和第2层的最小成本是它们自己的成本
# 递推求解dp数组
for i in range(2, n+1):
dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1]
return min(dp[n], dp[n-1]) # 最终答案是到达第n层楼梯的最小成本
假设楼梯的成本为 [10, 15, 20],那么到达第3层楼梯的最小成本为 15(从第1层到第2层的成本为10,从第2层到第3层的成本为5),代码输出如下:
cost = [10, 15, 20]
print(min_cost_climbing_stairs(cost)) # 输出15