原题的描述的解决。主要是对A-Z对应于1-26的分析:
但携程考虑的是对0-25的编码呢?
public int numDecodings(String s) {
/* if (s.charAt(0) == '0') {
return 1;
}*/
int pre = 1, curr = 1;
for (int i = 1; i < s.length(); i++) {
int tmp = curr;
if (s.charAt(i)== '0') {
if (s.charAt(i - 1) == '1' || s.charAt(i - 1) == '2') {
curr = pre+curr;
}else if(s.charAt(i - 1) > '2'){
curr = pre;
}
}else if (s.charAt(i - 1) == '1' || (s.charAt(i - 1) == '2' && s.charAt(i) >= '1' && s.charAt(i - 1) <= '5')){
curr = curr + pre;}
else if (s.charAt(i-1) == 0){
curr = pre;
}
pre = tmp;
}
return curr;
}
主要是对0的特殊的处理啊。多了几种的情况
1)s(i) = 0的时候。要是有s(i-1)有1或者2;
2)s(i) = 0的时候。要是有s(-1) > 3;
3)s(i-1) = 0;