题目连接:click~
/*题意:【字符--数字】编码,给出一串数字,问解码后有多少种 */
/**
*思路:考虑两位数的情况,比如26,可以解码为Z或BF
* 方便计算,选择逆序扫描
* d[i]表示在第i个位置的解码数
* d[i]= 0 ,当s[i]为0时
* d[i+1]+d[i+2] ,当前字符和后面的字符组成的数字小于等于26时
* d[i+1] ,其他情况
*/
class Solution {
public:
int numDecodings(string s) {
int len = s.size();
if(len == 0) return 0;
int *d = new int[len+1];
d[len] = 1;
for(int i = len-1; i >= 0; i --) {
if(s[i] == '0')
d[i] = 0;
else if(i+1 < len && (s[i] == '1' || ( s[i] == '2' && s[i+1] <= '6')) )
d[i] = d[i+1] + d[i+2];
else
d[i] = d[i+1];
}
return d[0];
}
};
/*
一些数据:00,2,17,27
*/