【LeetCode75】第六十题 使用最小花费爬楼梯

目录

题目:

示例:

分析:

代码:


题目:

【LeetCode75】第六十题 使用最小花费爬楼梯_第1张图片

示例:

【LeetCode75】第六十题 使用最小花费爬楼梯_第2张图片

分析:

题目给我们一个数组,第i个数表示在第i个台阶起步所需的花费。我们可以从下标为0或是1的台阶出发,问我们最终到达顶部所需花费的最小代价。

首先有两个点要提前说明,第一是我一开始站到0或是1的台阶是不需要花费的。我从0或1出发,才需要花费对应的代价。

第二就是cost花费数组的长度为n,则我们需要达到的顶层是n+1。

我们每次可以跨1~2节台阶,所以如果我们要走到第k节台阶,则有两种选择,一种是从k-1节台阶跨一节台阶,或者是从k-2节台阶跨两节台阶上来。

花费分别是 到达k-1节台阶的花费+cost[ k-1 ] , 到达k-2节台阶的花费+cost [ k - 2 ]

至此,我们发现了规律,也就是递推公式,所以我们直接使用dp数组来进行动态规划,dp[ i ]的含义就是到达第i节台阶所需的花费。由于我们一开始说了,我们最终需要到达的台阶是n+1层,所以dp数组的长度就应该是n+1而不是n。

关于dp数组的初始化,我们一开始也说了,只有从台阶起步,我们才会需要花费,因为我们在0或1节台阶上的花费都是0,直接初始化这俩为0就可以开始递推了。

最终返回dp数组的最后一个元素即可。

【LeetCode75】第六十题 使用最小花费爬楼梯_第3张图片

代码:

class Solution {
public:
    int minCostClimbingStairs(vector& cost) {
        vectordp(cost.size()+1,0);
        for(int i=2;i

你可能感兴趣的:(LeetCode75题解,算法,leetcode,动态规划,c++,数据结构)