标签:
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;
}
};标签:
原文地址:http://blog.csdn.net/u012501459/article/details/46550815