动态规划---746.使用最小花费爬楼梯

思路:

依旧是动态规划五部曲:

1.先确定数组dp[i]的下标及其含义:dp[i]表示为到达第i层台阶所需要花费的体力。

2.根据题意找出递推公式:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])

3.对定义好的数组进行初始化:确定在第0台阶时所耗费体力和在第1台阶时所耗费体力,进而进行计算。

4.找好数组需要遍历的范围,定义的为len(cost),则需要遍历的数组范围为cost长度加一,从第二层开始遍历。

5.返回花费的最小体力,设置测试类,进行输出验证。

'''数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。

每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。

请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。'''
class Solution:
    def minCostclimbsatirs(self, cost:list[int]) ->int:
        dp = [0] * (len(cost) + 1)
        '''dp[i]即达到第i台阶所花费的最少体力。'''
        dp[0]=0#初始值,即0台阶不需要耗费体力
        dp[1]=0#初始值,第一步不需要耗费体力
        for i in range(2,len(cost)+1):#确定遍历范围
            '''确定题目要求的是最少步数,当走第i步时,可以从【i-1】步直达当前步数算最小步数,也可从【i-2】步走到当前步,进而求总和来算最小步数。'''
            dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
        return dp[len(cost)]#返回最小项
#测试
n=Solution()
print(n.minCostclimbsatirs([9,10,19]))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值