规定1和A对应,2和B对应,3和C对应……那么一个数字字符串比如”111”,可转为”AAA””KA””AK”
// str[0..i-1]转化无需过问// str[i.....]去转化,返回有多少种转化方法public static int process(char[] str, int i) {if (i == str.length) {return 1;}// i没到最后,说明有字符if (str[i] == '0') { // 之前的决定有问题return 0;}if (str[i] == '1') {int res=process(str, i+1); // i自己作为单独部分,后续有多少种方法if(i + 1 < str.length){res+=process(str, i+2);// (i和i+1)作为单独部分,后续有多少种方法}return res;}if (str[i] == '2') {int res=process(str, i+1); // i自己作为单独部分,后续有多少种方法// (i和i+1)作为单独部分并且没有超过26,后续有多少种方法if (i + 1 < str.length && (str[i+1] > '0' && str[i + 1] <='6')) {res += process(str, i + 2);}return res;}// str[i]=='3'~9,一种决定return process(str, i + 1);}
