91. 解码方法
class Solution {
public:
int numDecodings(string s) {
// 1.明确状态含义:dp[i]表示前i个字符的解码方案数
int sLength = s.length();
vector<int> dp(sLength, 0);
if(s[0] == '0'){
return 0;
}
else{
dp[0] = 1;
}
for(int i = 1; i < sLength; i++){
int current = s[i] - '0', pre_cur = (s[i - 1] - '0') * 10 + s[i] - '0';
// 第一种情况是使用一个字符s[i]进行解码,只是在原有的每个解码方案之后加一个数字,不会影响解码方案
if(current != 0){
dp[i] = dp[i - 1];
}
// 第二种情况是使用两个字符s[i-1]和s[i]进行编码。s[i-1]不能等于0,并且s[i-1]和s[i]组成的整数必须小于等于26
if(pre_cur >= 10 && pre_cur <= 26){
if(i == 1){
dp[i] = dp[i] + 1;
}
else{
dp[i] = dp[i] + dp[i - 2];
}
}
}
return dp[sLength - 1];
}
};