题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)
先分析题目:
这是一道动态规划的题,我们可以根据动态规划五部曲分析解答这道题。
参考代码:
class Solution { public: int minCostClimbingStairs(vector<int>& cost) { int n = cost.size(); //由于我们要返回的是dp[n],所以需要开n+1个空间的dp表(数组) vector<int> dp(n+1); //填表前需要先初始化dp[0],dp[1]的值,以免填表时越界 dp[0]=dp[1]=0; int i=0; //dp[0],dp[1]已经填好了,所以dp表可以从i=2位置开始填 //记得i一定要取等于n,因为dp[n]才是到达楼顶的最低费用 for(i=2;i<=n;i++) { //状态转移方程,取最近一步到达dp[i]位置的两种途径的最小值 dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]); } //最后返回dp[n]即可 return dp[n]; } };
这个动态规划的题难就难在分析上,如果能把它分析清楚,代码写起来就几行,如果没有画图分析,就算给你代码真的也不一定能看懂。