规定1和A对应,2和B对应,3和C对应……那么一个数字字符串比如”111”,可转为”AAA””KA””AK”

    1. // str[0..i-1]转化无需过问
    2. // str[i.....]去转化,返回有多少种转化方法
    3. public static int process(char[] str, int i) {
    4. if (i == str.length) {
    5. return 1;
    6. }
    7. // i没到最后,说明有字符
    8. if (str[i] == '0') { // 之前的决定有问题
    9. return 0;
    10. }
    11. if (str[i] == '1') {
    12. int res=process(str, i+1); // i自己作为单独部分,后续有多少种方法
    13. if(i + 1 < str.length){
    14. res+=process(str, i+2);// (i和i+1)作为单独部分,后续有多少种方法
    15. }
    16. return res;
    17. }
    18. if (str[i] == '2') {
    19. int res=process(str, i+1); // i自己作为单独部分,后续有多少种方法
    20. // (i和i+1)作为单独部分并且没有超过26,后续有多少种方法
    21. if (i + 1 < str.length && (str[i+1] > '0' && str[i + 1] <='6')) {
    22. res += process(str, i + 2);
    23. }
    24. return res;
    25. }
    26. // str[i]=='3'~9,一种决定
    27. return process(str, i + 1);
    28. }