746. Min Cost Climbing Stairs
来源:互联网 发布:百知尚行 编辑:程序博客网 时间:2024/05/25 19:59
题目
题意
cost数组存放了每一级楼梯的花费, 要经过这一级就要付出相应的花费, 每次可以走1~2级, 可以选择从第0级和第1级开始走, 问走到顶(n)的最少花费是多少?(级数从0开始编号,对应开销cost[0])
分析
一些转化:
可以选择从第0级和第1级开始走->加一个第-1级,cost为0,从-1级出发
走到顶(n)->加一个第n级, cost为0, 走到第n级才算走完(前一步可以是n-1或者n-2)
状态转移方程:
dp[i]表示走到第i级的开销, 要走到第i级, 前一级可能是i-1或者i-2
时间复杂度
空间复杂度
实现
class Solution {public: int minCostClimbingStairs(vector<int>& cost) { if (cost.empty()) return 0; cost.insert(cost.begin(),0); cost.push_back(0); std::vector<int> dp(cost.size()); dp[1] = cost[1]; for(int i = 2; i < cost.size(); i++) { dp[i] = min(dp[i-1]+cost[i], dp[i-2]+cost[i]); } return dp[cost.size()-1]; }};
阅读全文