LeetCode——解码方法

Q:一条仅包含字母‘A’-‘Z’的消息用下列的方式加密成数字
'A' -> 1↵'B' -> 2↵...↵'Z' -> 26
现在给出加密成数字的密文,请判断有多少种解密的方法
例如:
给出的密文为“12”,可以解密为"AB"(1 2) 或者"L"(12).
所以密文"12"的解密方法是2种.

A:分两种情况。
当前位置 s[i]>='1' && <= '9',当前位置可单独作为一个解,dp[i]+=dp[i-1];
当前和前面两个位置 s[i-1 - i] >= 10 && <= 26,两个也可为一个解,dp[i]+=dp[i-2];

    public static int numDecodings(String s) {
        if (s == null || s.length() == 0)
            return 0;
        char temp = s.charAt(0);
        //第一个不能为0
        if (temp == '0')
            return 0;
        int[] dp = new int[s.length() + 1];
        //初始dp全部为0
        Arrays.fill(dp, 0);
        dp[0] = dp[1] = 1;
        for (int i = 2; i <= s.length(); i++) {
            temp = s.charAt(i - 1);
            if (temp >= '1' && temp <= '9')
                dp[i] += dp[i - 1];
            String sub = s.substring(i - 2, i);
            int sub_i = Integer.parseInt(sub);
            if (sub_i <= 26 && sub_i >= 10)
                dp[i] += dp[i - 2];
        }
        return dp[s.length()];
    }
原文地址:https://www.cnblogs.com/xym4869/p/12528424.html