LeetCode - 91. 解码方法

91. 解码方法

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

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

给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

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

示例 2:

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

解题思路: 整体的思想还是在考察DP,对一些corner case做一下处理基本就可解题。

// DP;Time&Space: O(n)
class Solution {
public:
    int numDecodings(string s) {
        if (s.empty() || s == "0") return 0;
        int n = s.size();
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        for (int i = 1; i <= n; ++i) {
            if (s[i - 1] != '0') dp[i] = dp[i - 1];
            if (i >= 2) {
                int val = (s[i - 2] - '0') * 10 + (s[i - 1]  - '0');
                if (val >= 10 && val <= 26) {
                    dp[i] += dp[i - 2];
                }
            }
        }
        return dp.back();
    }
};

你可能感兴趣的:(LeetCode,leetcode)