该题是动态规划入门程度,但最开始做的时候还是无从下手。
我觉得卡哥给的步骤很重要:
确定dp数组(dp table)以及下标的含义
确定递推公式
dp数组如何初始化
确定遍历顺序
举例推导dp数组
首先明确dp数组(dp table)以及下标的含义很重要,最开始做这道题的时候,设了dp但不知道是代表什么。
一般题目就假设dp[sz]为最终结果,因此可以间接懂得dp[i]就是到i层的花费。
知道这一步就可以推得递归函数了。
完整代码:
点击查看代码
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int sz=cost.size();
if(sz==0){return 0;}
if(sz==1){return cost[0];}
vector<int>dp(sz+1);
dp[0]=0;
dp[1]=0;
for(int i=2;i<=sz;i++){
int num1=dp[i-1]+cost[i-1];
int num2=dp[i-2]+cost[i-2];
dp[i]=min(num1,num2);
}
return dp[sz];
}
};