//第一种方法:递归实现,代码简单,时间复杂高。
class Solution {
public:
int solve(int index, vector<int>&cost){
if (index <= 1){
return 0;
}
return min(solve(index - 1, cost) + cost[index - 1], solve(index - 2, cost) + cost[index - 2]); //到达index这点,要么从Index - 1,要么从index - 2来 取小的
}
int minCostClimbingStairs(vector<int>& cost){
int ans = solve(cost.size(), cost);
return ans;
}
};
//第二种方法:使用一个数组记录到达index之前所需要的成本
class Solution {
public:
int solve(int index, vector<int>&cost){
if (index <= 1){
return 0;
}
vector<int>dp(cost.size() + 1, 0);
dp[0] = dp[1] = 0;
int i;
for (i = 2; i <= index; i++){
dp[i] = min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]);
}
return dp[index];
}
int minCostClimbingStairs(vector<int>& cost){
int ans = solve(cost.size(), cost);
return ans;
}
};
class Solution {
public:
//第三种方法,进一步优化,直接使用两个变量记录到达index - 2所需要的成本,index -1 所需要的成本
int solve(int index, vector<int>&cost){
if (index <= 1){
return 0;
}
int ans;
int tmp1 = 0, tmp2 = 0;
int i;
for (i = 2; i <= index; i++){
ans = min(tmp1 + cost[i - 2], tmp2 + cost[i - 1]);
tmp1 = tmp2;
tmp2 = ans;
}
return ans;
}
int minCostClimbingStairs1(vector<int>& cost){
int ans = solve(cost.size(), cost);
return ans;
}
};
Min Cost Climbing Stairs
最新推荐文章于 2022-03-07 21:37:45 发布