从左往右-1

102 阅读1分钟
public class Test1  {
    public static void main(String[] args) {
        /*
        * 规定1和A对应、2和B对应、3和C对应...
        * 那么一个数字字符串比如“111”就可以转换成“AAA","KA"和"AK"
        * 给定一个只有数字字符组成的字符串str,返回有多少种转化结果
        * */
        char[] chars = {'1','2'};
        int number = getNumber(chars, 0);
        System.out.println("number = " + number);
    }

    private static int getNumber(char[] str,int i){
        //如果字符串到最后一个位置了,就返回
        if(str.length == i){
            return 1;
        }
        //如果字符串中有单独将0转的情况直接返回0
        if(str[i] == '0'){
            return 0;
        }

        if(str[i] == '1'){
            int result = getNumber(str,i+1);
            if(i+1<str.length){
                result += getNumber(str,i+2);
            }
            return result;
        }
        if(str[i] == '2'){
            int result = getNumber(str,i+1);
            if(i+1<str.length && str[i+1] >= '1' && str[i+1] <= '6'){
                result += getNumber(str,i+2);
            }
            return result;
        }
        if(str[i] > '3' && str[i] < '9'){
            return getNumber(str,i+1);
        }

        return getNumber(str,i+1);
    }
}