Day94 代码随想录打卡|动态规划篇--- 使用最小花费爬楼梯
题目(leecode T746):
给你一个整数数组 cost
,其中 cost[i]
是从楼梯第 i
个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0
或下标为 1
的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
方法:分析动态规划的五步
1:dp数组的定义:dp[i]表示到第i层楼梯所需的花费
2:dp的递推公式:因为每次只能走一步或两步楼梯,因此dp[i]可由dp[i-1]走一步到dp[i]或者由dp[i-2]走两步到dp[i],因此dp[i]等于min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1])。
3:dp数组初始化:因为第0层和第一层楼梯不需要耗费体力到达,因此dp[0]=dp[1]=0
4:遍历顺序:由递推公式可得遍历顺序是从前到后
5:举例推导dp数组:0 0 1 2 2 3 3 4 4 5 6
题解:
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int> dp(cost.size() + 1);
dp[0] = 0;
dp[1] = 0;
for(int i = 2; i <= cost.size(); i++){
dp[i] = min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]); //递推公式
}
return dp[cost.size()];
}
};