解体思路:动态规划
首先理解题意:什么是到达楼顶,这楼顶是指数组cost最后一个元素的下一个位置
所以需要创建一个元素个数为cost.size()+1的dp数组 然后记录到达每一个位置的最小花费
下标0 和 1位置是起点 到达 i 位置的最小花费这个i需要从下标为2开始算
到达i位置的最小花费方程 dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
dp[0] 和 dp[1]默认为0 因为是0 1下标位置是起点之前没有任何叠加
最后返回结果 dp[ cost.size() ]
代码如下
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost)
{
//创建dp表
//填表 填到达每个位置的最小花费
//返回结果
int n=cost.size();
vector<int> dp (n+1);
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];
}
};