给你一个只含数字的 非空 字符串 num ,请计算并返回 解码 方法的 总数
https://leetcode-cn.com/problems/decode-ways/
示例1:
示例2:
示例3:
示例4:
提示:
Java解法
package sj.shimmer.algorithm.y2021;
/**
 * Created by SJ on 2021/3/12.
 */
class D46 {
    public static void main(String[] args) {
        System.out.println(numDecodings("12"));
        System.out.println(numDecodings("226"));
        System.out.println(numDecodings("0"));
        System.out.println(numDecodings("06"));
        System.out.println(numDecodings("99"));
        System.out.println(numDecodings("2611055971756562"));
        System.out.println(numDecodings("111111111111111111111111111111111111111111111"));
        System.out.println(numDecodings("10"));
        System.out.println(numDecodings("26"));
        System.out.println(numDecodings("2101"));
    }
    public static int numDecodings(String s) {
        int length = s.length();
        int[] nums = new int[length];
        nums[0] = s.charAt(0)=='0'?0:1;
        int index = 1;
        while (index < length) {
            char c = s.charAt(index);
            char lastC = s.charAt(index-1);
            if (c == '0') {
                //如果前一位不是1或者2,显然无法解码
                if (lastC != '1' && lastC != '2') {
                    return 0;
                }else {
                    //如果前一位是1或者2
                    nums[index] = index == 1 ? 1 : nums[index - 2];
                }
            } else if (lastC == '1' || (lastC == '2' && c >= '1' && c <= '6')) {
                nums[index] = index == 1 ? nums[index - 1] + 1 : nums[index - 1] + nums[index - 2];
            } else {
                nums[index] = nums[index-1];
            }
            index++;
        }
        return nums[length - 1];
    }
}

参考解
https://leetcode-cn.com/problems/decode-ways/solution/san-chong-jie-fa-dfsyi-wei-dong-tai-gui-tfvin/
- 
一维动态规划
 










