A message containing letters from A-Z is being encoded to numbers using the
following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12", it could be decoded as "AB" (1
2) or "L" (12).
The number of ways decoding "12" is 2.
这道题的关键是如何进行分类的问题。
设状态A[i]表示字符串前i个字符能表示的解码个数。那么它依赖于A[i-1]和A[i-2]。具体的依赖关系如下图:
runtime:4ms
class Solution {
public:
int numDecodings(string s) {
int length=s.size();
if(length==0)
return 0;
int current=s[0]=='0'?0:1;
int last=1;
for(int i=1;i<length;i++)
{
int tmp=current;
if(s[i]=='0')
{
if(s[i-1]=='1'||s[i-1]=='2')
current=last;
else
return 0;
}
else if(s[i-1]=='1'||s[i-1]=='2'&&s[i]<='6')
current+=last;
else
current=current;
last=tmp;
}
return current;
}
};至于为什么current的初值是s[0]=='0':0?1,last的初值为1,这个含义不是很直观,但是可以通过试验几个字符串来确定。

本文介绍了一种解码计数算法,该算法用于计算给定编码消息中可能的解码方式总数。通过动态规划方法,文章详细解释了如何根据输入数字串计算解码方式的数量,并给出了具体的实现代码。

1380

被折叠的 条评论
为什么被折叠?



