方法一:用递归来做
这道题一开始以为是简单的递归问题,按照从前往后的顺序递归,总是在“10”这个输入上报错。
按照从后向前的方法递归,应对短序列没有问题,但是面对长序列,因为存在大量重复计算,所以超时。
如果用递归来做,应该用记忆化递归!
class Solution {
public:
int numDecodings(string s) {
//if(s == "0" || s == "") return 0;
if(s[0] == '0') return 0;
return decode(s, s.length()-1);
}
int decode(string s, int index) {
if(index <= 0) return 1; //<= 而不是 ==
int count = 0; //这里是我不会处理的地方
char cur = s[index];
char prev = s[index - 1];
if(cur > '0') {
count += decode(s, index-1);
}
if(prev == '1' || (prev == '2' && cur <= '6')) {
count += decode