思路:
依旧是动态规划五部曲:
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]))