题目
包含 A-Z 的字母的消息通过以下规则编码:
给定一个包含数字的编码消息,请确定解码方法的总数。
例如,
给定消息为 "12"
, 它可以解码为 "AB"(1 2)
或 "L"(12)
。
"12"
的解码方法为 2 种。
题解
这道题用动态规划,很好解决。但是细节很多需要考虑到位,比如存在不能解码的情况如:
0,100,130
等,然后需要注意的case
:10,27,102
等
代码
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
if(n==0) return 0;
vector<int> nums(n,0);
for(int i=0;i<n;i++){
if(s[i]=='0'){
if(i==0) return 0;
else if(s[i-1]=='0'||s[i-1]>'2') return 0;
else nums[i]=i-2>=0?nums[i-2]:1;
}
else{
if(i==0) nums[i]=1;
else if(s[i-1]=='1'||(s[i-1]=='2'&&s[i]<='6')) nums[i]=nums[i-1]+(i-2>=0?nums[i-2]:1);
else nums[i]=nums[i-1];
}
}
return nums[n-1];
}
};