LCR 088. 使用最小花费爬楼梯
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。
请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
题解
主要方法:动态规划
解决思路:对于到达当前台阶,总共有两种走法,一种是跨一个台阶即从i-1台阶走到当前位置,还有一个就是跨两个台阶走到当前位置,即从i-2台阶处走到当前位置。所以走到当前位置目前消耗的体力有两种dp[i-1]+cost[i-1] 或者 dp[i-2]+cost[i-2], 当然是取最小值,所以状态转移公式为:min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0 for i in range(len(cost)+1)]
dp[0] = dp[1]
for i in range(2, len(cost)+1):
dp[i] = min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2])
return dp[len(cost)]
❗容易忽略的点:dp的长度应该是n+1,因为要计算的是达到最高地方所消耗的体力,而dp[i]记录的是达到当前位置所消耗的体力,还有就是由于一开始可以选择在0或者1作为初始点,因此dp[0]=dp[1]=0
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步