题解 | #最小花费爬楼梯#
最小花费爬楼梯
https://www.nowcoder.com/practice/6fe0302a058a4e4a834ee44af88435c7
#include <algorithm> #include <vector> class Solution { public: //dp[i]:到达第i层台阶所需的最小cost总和。而cost[i]指的是从第i层楼梯起步所需要的cost,支付cost后能爬1~2步。 //递推公式:dp[i]=min(dp[i-1]+cost[i-1] , dp[i-2]+cost[i-2]) //初始化:dp[0]=0,dp[1]=0。 //遍历顺序:从前往后 //细节:到达台阶顶部是要比cost数组的size多1的。比如[2,5,20],20并不是台阶顶部,而是到达顶部前的最后一级。 int minCostClimbingStairs(vector<int>& cost) { int costsize=cost.size(); vector<int>dp(costsize+1,0);//初始化dp,将cost.size()+1数量的元素全部初始化为0 if(costsize==1)return cost[0];//极端情况 for(int i=2;i<=costsize;i++)//注意是<=cost.size(),因为我们上面说了台阶顶部是比cost数组的大小还要多1的。 { dp[i]=min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]); } return dp[dp.size()-1]; } };