建立动态规划数组dp,dp[i]用于记录字符串至第i-1位前的解码方法的总数。
依次扫描数字,当前数字不为0时,dp[i]+=dp[i-1]表示当前组合数量包括前一位数字前的组合总数;
当前数字与前一位组合的数字处于10-26时,dp[i]+=dp[i-2]表示当前组合数量包括前两位数字前的组合总数。
int numDecodings(string s) {
if(s.empty()) return 0;
int n = s.size();
vector<int> dp(n+1);
dp[0] = 1;
for(int i=1;i<=n;++i){
char c = s[i-1];
if(c!='0')
dp[i]+=dp[i-1];
if(i>1){
int num = 10*(s[i-2]-'0')+(c-'0');
if(num==0)//剪枝
return 0;
if(num>=10 && num<=26)
dp[i]+=dp[i-2];
}
}
return dp.back();
}