[LeetCode] 747. Min Cost Climbing Stairs

Problem:

On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed).

Once you pay the cost, you can either climb one or two steps. You need to find minimum cost to reach the top of the floor, and you can either start from the step with index 0, or the step with index 1.

Example 1:

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

Example 2:

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].

Note:

  1. cost will have a length in the range [2, 1000].
  2. Every cost[i] will be an integer in the range [0, 999].

题意分析:题目给定一个数组cost:

1. 数组的size代表阶梯的级数;

2. 每个数组元素代表登上该级阶梯的消费值;

3. 可以从第一级(下标为0)或者第二级(下标为1)阶梯开始攀登;

4. 每次可以攀登一级或者两级阶梯,即从第一级阶梯可以到第二级阶梯,也可以直接到第三级。

要求求得攀登完整个阶梯所需的最低消费值。


解题思路:应用动态规划思想,求取到达每级阶梯所需的最低消费,最终返回到达顶部的消费值

即为所求。


Solution:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        cost.push_back(0);
        
        vector<int> to_i_cost(cost.size(), 0);
        to_i_cost[0] = cost[0];
        to_i_cost[1] = cost[1];
        
        for (int i = 2; i < cost.size(); i++) {
            to_i_cost[i] = min(to_i_cost[i-1], to_i_cost[i-2]) + cost[i];
        }
        
        return to_i_cost.back();
    }
};

Note: 这里在cost数组的末端加入一个0表示的意思增加一级阶梯,并且使登上该级阶梯的消费值为0,

代表登顶的时候不需要消费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值