1.题目
2.求解
数据量不大,但是需要判断一些情况。
1、获取前一位和当前为所组成的数字所对应的解码>9(即是两位数)
① 当前位非零,则是dp[i] = dp[i - 2] + dp[i - 1]
② 当前位为零,dp[i] = dp[i - 2]
2、获取前一位和当前为所组成的数字所对应的解码0< x <9(即是非零个位数)
dp[i] = dp[i - 1]
3、x = 0则直接return 0;
3.代码
int dp[105];
class Solution {
public:
int numDecodings(string s) {
if(s[0] == '0') return 0;
dp[0] = 1;
dp[1] = 1;
int i, j;
for(i = 1, j = 2; i < s.size(); i++, j++){
int num = (s[i - 1] - '0') * 10 + (s[i] - '0');
if(num <= 26 && num > 9){
if(s[i] == '0') dp[j] = dp[j - 2];
else dp[j] = dp[j - 2] + dp[j - 1];
}
else if(s[i] != '0'){
dp[j] = dp[i];
}
else return 0;
}
return dp[i];
}
};