leecode 1054. Min Cost Climbing Stairs

1054. Min Cost Climbing Stairs

Description
在楼梯上,每一号台阶都有各自的费用,即第 i 号台阶有非负成本cost [i](台阶从0号索引)。
一旦你支付了费用,你可以爬一到两步。 你需要找到最低成本来到达最高层,你可以从索引为0的楼梯开始,也可以从索引为1的楼梯开始。

Examples:

Input: cost = [10, 15, 20]
Output: 15
Explanation: Cheapest is start on cost[1], pay that cost and go to the top.

Input: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
Output: 6
Explanation: Cheapest is start on cost[0], and only step on 1s, skipping cost[3].

分析:分析该题可知该题为较为基础的动态规划问题,每一个台阶处的状态取决于前两个台阶的状态,因此分析题意列出动态转移方程即可解答。
令sum_cost_n[n]表示处于第n个台阶时所花费的最低cost,则我们可知sum_cost_n[0]和sum_cost_n[1]均为0,因为起始位置可以位于这两个位置。当n>=2时,我们可以列出如下式子:

sum_cost_n[n]=min(sum_cost_n[n-1]+cost[n-1],sum_cost_n[n-2]+cost[n-2])

故根据该方程进行遍历,最终sum_cost_n[n]即为所求
代码如下:python3

class Solution:
    """
    @param cost: an array
    @return: minimum cost to reach the top of the floor
    """
    def minCostClimbingStairs(self, cost):
        # Write your code here
        #sum_cost_n表示到达第n个台阶的最少消耗
        if len(cost)<=2:
            return 0
        sum_cost_n=[0]*(len(cost)+1) #初始化数组
        sum_cost_n[0]=sum_cost_n[1]=0  #初始化第0和第1个台阶处的值
        for each in range(2,len(cost)+1):
            sum_cost_n[each]=min(sum_cost_n[each-1]+cost[each-1],sum_cost_n[each-2]+cost[each-2])
        return sum_cost_n[len(cost)]
            
            
            
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值