zoukankan      html  css  js  c++  java
  • 解码方法

    题目:有一个消息包含A-Z通过以下规则编码,现在给你一个加密过后的消息,问有几种解码的方式

    'A' -> 1

    'B' -> 2...

    'Z' -> 26

    样例

    给你的消息为12,有两种方式解码 AB(12) 或者 L(12). 所以返回 2

    算法思路:

    先建立一位dp数组,长度比输入数组长多多2,全部初始化为1,因为斐波那契数列的前两项也为1,然后从第三个数开始更新,对应数组的第一个数。对每个数组首先判断其是否为0,若是将改为dp赋0,若不是,赋上一个dp值,此时相当如加上了dp[i - 1], 然后看数组前一位是否存在,如果存在且满足前一位不是0,且和当前为一起组成的两位数不大于26,则当前dp值加上dp[i - 2]

    class Solution {
    public:
    /**
    * @param s a string, encoded message
    * @return an integer, the number of ways decoding
    */
    int numDecodings(string& s) {
    if (s.empty()) return 0;
    int n = s.size();
    vector<int> dp(n + 2, 1);
    for (int i = 2; i < n + 2; ++i) {
    if (s[i - 2] == '0') dp[i] = 0;
    else dp[i] = dp[i - 1];
    if (i >= 3 && (s[i - 3] == '1' || (s[i - 3] == '2' && s[i - 2] <= '6'))) {
    dp[i] += dp[i -2];
    }
    }
    return dp.back();
    }
    };

     截图:

  • 相关阅读:
    HDU1196 ZOJ2417 Lowest Bit
    HDU1008 ZOJ2108 Elevator
    HDU2614 Beat
    HDU2057 A + B Again
    POJ3984 迷宫问题
    HDU1013 POJ1519 Digital Roots
    HDU2051 Bitset
    HDU2037 今年暑假不AC
    ACM入门练习与递推小结
    HDU2046 骨牌铺方格【递推】
  • 原文地址:https://www.cnblogs.com/w1500802028/p/7296532.html
Copyright © 2011-2022 走看看