- 使用最小花费爬楼梯
数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。
请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
示例 1:
输入:cost = [10, 15, 20]
输出:15
解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。
示例 2:
输入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出:6
解释:最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6 。
参考代码:
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
#dp[i]表示到达第i阶台阶所需要的最低花费
#由于到达的是楼顶终点,所以dp的大小为cost的大小+1
#关系是,到达位置i,一种是从i-1这个位置走一步到达,另一种是从i-2这个位置走两步到达
#因为是要计算走到位置i,花费最小,因此要取上述两种情况的最小值
#cost[i]表示走到i+1或i+2阶所需要的体力花费,所以到达i-1或i-2阶,在到达i阶所花费的最小体力值为
#dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
#base case:选择台阶为0或1作为初始阶梯,无需花费体力,故dp[0]=0,dp[1]=0
if len(cost)==0:return 0
if len(cost)==1:return cost[0]
if len(cost)==2:return min(cost[0],cost[1])
dp=[0]*(len(cost)+1)
dp[0]=0
dp[1]=0
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)]
参考链接:https://blog.csdn.net/weixin_41234001/article/details/104744578