文章目录
- 使用最小花费爬楼梯
- 91解码方法
使用最小花费爬楼梯
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() == 2)return min(cost[0],cost[1]);vector<int> dp;dp.reserve(cost.size()+1);dp[0] = 0;dp[1] = 0;for(int i = 2;i <=cost.size();i++){dp[i] = min(cost[i-2]+dp[i-2],cost[i-1]+dp[i-1]);}return dp[cost.size()];}
};
空间复杂度可以优化为O(1);
可以试着倒着走,时间及空间复杂度不变;
91解码方法
题目
class Solution {
public:int numDecodings(string s) {//1.创建dp表//2.初始化//3.填表//4.返回值vector<int> dp(s.size());dp[0] = s[0] != '0';//对于第一个字符,若不是0、则从在一个解,否则,不存在解//处理边界if(s.size() == 1) return dp[0];if(s[0] != '0' && s[1] != '0') dp[1] += 1;int t = (s[0] - '0') * 10 + s[1] - '0';// 前两个字符编码if(t >= 10 && t <= 26) dp[1] += 1;for(int i = 2; i < s.size(); i++){if(s[i] != '0') dp[i] += dp[i-1];//处理单独编码int t = (s[i-1] - '0') * 10 + s[i] - '0';if(t >= 10 && t <= 26) dp[i] += dp[i-2];}return dp[s.size()-1];}
};
优化:
class Solution {
public:int numDecodings(string s) {//优化vector<int> dp(s.size()+1);dp[0] = 1;//保证后面的填表具有正确性dp[1] = s[1 - 1] != '0';for(int i = 2; i <= s.size(); i++){if(s[i - 1] != '0') dp[i] += dp[i-1];//处理单独编码int t = (s[i - 2] - '0') * 10 + s[i - 1] - '0';if(t >= 10 && t <= 26) dp[i] += dp[i-2];}return dp[s.size()];}
};