题目描述(Medium)
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
题目链接
https://leetcode.com/problems/decode-ways/description/
Example 1:
Input: "12"
Output: 2
Explanation: It could be decoded as "AB" (1 2) or "L" (12).
Example 2:
Input: "226"
Output: 3
Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).
算法分析
动态规划,cur = 当前为两位数的解法数prev + 当前为一位数的解法数cur,加上限制条件即可。
提交代码:
class Solution {
public:
int numDecodings(string s) {
if(s.empty() || s[0] == '0') return 0;
const int n = s.size();
int prev = 0, cur = 1;
for (int i = 0; i < n; ++i) {
// 当前为1位数解法不可行
if (s[i] == '0') cur = 0;
// 当前为2位数解法不可行
if (i < 1 || !(s[i - 1] == '1' ||
s[i - 1] == '2' && s[i] <= '6'))
prev = 0;
int temp = cur;
cur += prev;
prev = temp;
}
return cur;
}
};