class Solution {
public:
int numDecodings(string s) {
vector<int> dups(s.size()+1);
int cursor = s.size() - 1;
if(cursor<0) return 0;
dups[s.size()] = 1;
for(;cursor>=0;cursor--){
if(s[cursor] != '0'){
dups[cursor] += dups[cursor+1];
if((cursor + 1) < s.size() && (s[cursor]=='1' || (s[cursor]=='2' && s[cursor+1] <= '6' ))){
dups[cursor] += dups[cursor+2];
}
}
}
return dups[0];
}
};
public:
int numDecodings(string s) {
vector<int> dups(s.size()+1);
int cursor = s.size() - 1;
if(cursor<0) return 0;
dups[s.size()] = 1;
for(;cursor>=0;cursor--){
if(s[cursor] != '0'){
dups[cursor] += dups[cursor+1];
if((cursor + 1) < s.size() && (s[cursor]=='1' || (s[cursor]=='2' && s[cursor+1] <= '6' ))){
dups[cursor] += dups[cursor+2];
}
}
}
return dups[0];
}
};