一条包含字母 A-Z 的消息通过以下方式进行了编码:

    1. 'A' -> 1
    2. 'B' -> 2
    3. ...
    4. 'Z' -> 26

    给定一个只包含数字的非空字符串,请计算解码方法的总数。
    题目数据保证答案肯定是一个 32 位的整数。

    示例 1:

    输入:"12"
    输出:2
    解释:它可以解码为 "AB"(1 2)或者 "L"(12)。
    

    示例 2:

    输入:"226"
    输出:3
    解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
    

    示例 3:

    输入:s = "0"
    输出:0
    

    示例 4:

    输入:s = "1"
    输出:1
    

    示例 5:

    输入:s = "2"
    输出:1
    


    提示:

    • 1 <= s.length <= 100
    • s 只包含数字,并且可以包含前导零。
      class Solution {
      public:
        int numDecodings(string s) {
            if (s[0] == '0') return 0;
            int pre = 1, curr = 1;//dp[-1] = dp[0] = 1
            for (int i = 1; i < s.size(); i++) {
                int tmp = curr;
                if (s[i] == '0')
                    if (s[i - 1] == '1' || s[i - 1] == '2') curr = pre;
                    else return 0;
                else if (s[i - 1] == '1' || (s[i - 1] == '2' && s[i] >= '1' && s[i] <= '6'))
                    curr = curr + pre;
                pre = tmp;
            }
            return curr;
        }
      };