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:
cost
will have a length in the range[2, 1000]
.- 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,
代表登顶的时候不需要消费。