/**
     * 递推公式倒是不难,主要是里面的0这个搅屎棍情况有点多,最核心的问题
     * 0 不能单独出现,只能是10或者20
     * 那么0的限制就有以下几个
     * 1 0 不能出现在首位,露头就洗白
     * 2 要是0与前一个数字合起来的数值大于20也不行
     * 另外对于非0相关的话有个限制就是两个字符合起来的数值不能超过26,超过就只能单飞
     *
     * @param nums
     * @return
     */
    public int solve(String nums) {
        // write code here
        if (nums == null) {
            return 0;
        }
        if (nums.indexOf('0') == 0) {
            return 0;
        }
        int[] dp = new int[nums.length()];
        for (int i = 0; i < dp.length; i++) {
            if (i == 0) {
                dp[i] = 1;
            } else {
                int num1 = Integer.parseInt(nums.substring(i - 1, i));
                int num2 = Integer.parseInt(nums.substring(i, i + 1));
                int tmp = Integer.parseInt(nums.substring(i - 1, i + 1));
                //0的限制,,出现两个0
                if (tmp == 0) {
                    return 0;
                }
                // 出现30等情况
                if (num2 == 0 && tmp > 20) {
                    return 0;
                }
                // 各种单飞的情况
                if (tmp > 26 || num2 == 0 || num1 == 0) {
                    dp[i] = dp[i - 1];
                } else {
                    if (i == 1) {
                        dp[i] = 2;
                    } else {
                        dp[i] = dp[i - 1] + dp[i - 2];
                    }
                }
            }
        }
        return dp[nums.length() - 1];
    }