zoukankan      html  css  js  c++  java
  • 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()];
        }
    
  • 相关阅读:
    hdu 1195 Open the Lock
    hdu 1180 诡异的楼梯
    hdu 1175 连连看
    背包(采药)
    LCS模板,求长度,并记录子串
    hdu 1159 Common Subsequence
    hdu 1231 最大连续子序列
    DP的简单应用
    hdu 1728 逃离迷宫
    点击页面其他地方,关闭弹框
  • 原文地址:https://www.cnblogs.com/xym4869/p/12528424.html
Copyright © 2011-2022 走看看