题目:
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
代码(c++):
class Solution {
public:
int numDecodings(string s) {
if(s[0] == '0') return 0;
if(s.length() == 1) return 1;
int decode1, decode2;
decode1 = 1;
if((s[0] == '1') || (s[0] == '2' && s[1]-'0' <= 6)){
if(s[1] == '0') decode2 = 1;
else decode2 = 2;
}
else if(s[1] == '0') return 0;
else decode2 = 1;
for(int i = 2; i < s.length(); i++){
int temp = decode2;
if((s[i-1] == '1') || (s[i-1] == '2' && s[i]-'0' <= 6)) {
if(s[i] != '0') decode2 = decode1 * 2 + (decode2 - decode1);
else decode2 = decode1;
}
else if(s[i] == '0') return 0;
decode1 = temp;
}
return decode2;
}
};