//1.递归版本
    public int solve1 (String nums) {
        return process(nums.toCharArray(),0,nums.length());
    }
    //返回从[idx...len)可能的译码结果
    public int process(char[] chars,int idx,int N){
        if(idx==N) return 1;
        if(chars[idx]=='0') return 0;
        int cur = 0;
        int res = 0;
        while(idx<N&&(cur = cur*10+(chars[idx]-'0'))<=26){
            res+=process(chars,++idx,N);
        }
        return res;
    }
    //2.递归转动态规划
    public int solve (String nums) {
        if(nums==null||nums.length()==0) return 0;
        int N = nums.length();
        int[] dp = new int[N+1];
        dp[N] = 1;
        for(int i = N-1;i>=0;i--){
            if(nums.charAt(i)=='0'){
                dp[i] = 0;//需要特别注意的是,以'0'开头是不会有情况的
            }else{
                int cur = 0;
                int res = 0;
                int idx = i;
                while(idx<N&&(cur = cur*10+(nums.charAt(idx)-'0'))<=26){
                    res+=dp[++idx];
                }
                dp[i] = res;
            }
        }
        return dp[0];
    }