[LeetCode] 91. Decode Ways
2017-02-26 23:46
239 查看
[LeetCode] 91. Decode Ways
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.
思路:用动规。
dp[i]表示从s[0:i]可以构造多少种code。
所以dp[i]分成三种状态:
s[i] == ‘0’。
s[i] == ‘1~6’。
s[i] == ‘7~9’。
对于1、2的情况,我们考虑 s[i-1] == ‘1~2’,用以判断是否可以构成一个code。
对于3的情况,我们考虑s[i-1] == ‘1’,用以判断是否可以构成一个code。
class Solution { public: int numDecodings(string s) { int len = s.length(); vector<int> dp(len+1, 0); for (int i=0; i<len; ++i) { if (i == 0) { if (s[i] == '0') return 0; else dp[i] = 1; } else { if (s[i] == '0') { if (s[i-1] >= '1' && s[i-1] <= '2') { if (i-2 < 0) dp[i] = 1; else dp[i] = dp[i-2]; } else { dp[i] = 0; } } else if (s[i] <= '6') { if (s[i-1] >= '1' && s[i-1] <= '2') { if (i-2 < 0) dp[i] = dp[i-1] + 1; else dp[i] = dp[i-2] + dp[i-1]; } else { dp[i] = dp[i-1]; } } else { if (s[i-1] == '1') { if (i-2 < 0) dp[i] = dp[i-1] + 1; else dp[i] = dp[i-2] + dp[i-1]; } else { dp[i] = dp[i-1]; } } } } return dp[len-1]; } };
相关文章推荐
- leetcode 91. Decode Ways
- Leetcode 91. Decode Ways
- Leetcode 91. Decode Ways
- Leetcode: 91. Decode Ways
- leetcode: 91. Decode Ways
- Leetcode 91. Decode Ways
- LeetCode 91. Decode Ways
- LeetCode 题目:91. Decode Ways
- [Leetcode] 91. Decode Ways 解题报告
- [LeetCode]91. Decode Ways
- LeetCode 91. Decode Ways
- leetcode 91. Decode Ways
- Leetcode-91. Decode Ways
- [leetcode] 91. Decode Ways
- leetcode 91. Decode Ways
- [leetcode] 91. Decode Ways
- Leetcode 91. Decode Ways (Medium) (cpp)
- 【LeetCode】91. Decode Ways
- [leetcode]91. Decode Ways
- leetcode 91. Decode Ways