原网址为 https://leetcode.com/problems/decode-ways/description/
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
代码:
class Solution {
public:
int numDecodings(string s) {
vector<int> nums(s.size());
if (s.size() == 0 || s[0] == '0') return 0;
for (int i = 1; i < s.size(); i++) {
if (s[i] == '0' && s[i - 1] != '1' && s[i - 1] != '2') return 0;
}
nums[0] = s[0] == '0' ? 0 : 1;
for (int i = 1; i < s.size(); i++) {
nums[i] = s[i] == '0' ? 0 : nums[i - 1];
if (s[i - 1] == '1' || (s[i - 1] == '2' && s[i] <= '6')) {
nums[i] = i >= 2 ? nums[i] + nums[i - 2] : nums[i] + 1;
}
}
return nums[s.size() - 1];
}
};