LeetCode LCR088.使用最小花费爬楼梯
思路🧐:
动态规划经典题目,假设 dp[i] (最小花费的记录数组)表示到达第 i 阶楼梯所需的最小花费。对于第i阶楼梯,可以从第i-1阶楼梯爬一级上来,也可以从第i-2阶楼梯爬两级上来。因此,到达第i阶楼梯的最小花费就是这两种情况中的较小值,所以我们可以用这种思想,不断递推,直到爬到楼顶,此时dp[i]就是最小花费,并且得出公式:
d p [ i ] = m i n ( d p [ i − 1 ] + c o s t [ i − 1 ] , d p [ i − 2 ] + c o s t [ i − 2 ] ) dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]) dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])
代码🔎:
class Solution { public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); vector<int> dp(n + 1); //由题所得,我们可以选0或1作为初始阶梯 //所以dp[0]或dp[1]最小花费为0 dp[0] = dp[1] = 0; for(int i = 2; i <= n; i++) { dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i- 2]); } return dp[n]; } };