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.
/*
题意:字母表A-Z对应数字1-26,给定字符串S,问有多少种解码方式
思路:设状态dp[i]表示字符串前i个字符能表示的解码个数。那么它依赖于dp[i-1]和dp[i-2]
具体的依赖关系如下:
(1)s[i] == '0',如果满足s[i-1] == '1' || s[i-1] == '2' 则dp[i] = dp[i-2],否则返回0
(2)不满足条件1,但是满足s[i-1] == '1' || (s[i-1] == '2' && s[i] <= '6')则
dp[i] = dp[i-1] + dp[i-2]
(3)不满足前两个条件,则dp[i] = dp[i-1]
*/
class Solution {
public:
int numDecodings(string s) {
int len = s.length();
if(!len) return 0;
vector<int> dp(len + 1, 0);
dp[0] = 1;
for(int i = 1; i <= len; i++){
if(s[i-1] == '0'){
if(i > 1 && (s[i-2] == '1' || s[i-2] == '2'))
dp[i] = dp[i-2];
else
return 0;
}
else if(i > 1 && (s[i-2] == '1' || (s[i-2] == '2' && s[i-1] <= '6')))
dp[i] = dp[i-1] + dp[i-2];
else
dp[i] = dp[i-1];
}
return dp[len];
}
};
本文介绍了一种算法,用于计算给定数字串按照特定映射规则的不同解码方式总数。通过动态规划方法,利用一个状态数组dp来记录每个位置上的有效解码数量,最终返回整个字符串的有效解码总数。
1885

被折叠的 条评论
为什么被折叠?



