/**
* Abstract: A DP problem, immediately from the problem specs;
* however, state relation formulation requires careful consideration.
* To calculate dp[i], we take s[i] and proceed by checking weather s[i]
* can be decoded together with s[i - 1]. With this explaination,
* to understand the code here should not be of any difficulty.
*/
bool decode(char *s, int i) {
if (s[i - 1] == '0') return false;
int code = (s[i - 1] - '0') * 10 + (s[i] - '0');
return (code > 0 && code <= 26);
}
int numDecodings(char * s){
int n = strlen(s), dp[n];
dp[0] = s[0] == '0' ? 0 : 1;
if (n == 1) return dp[0];
if (dp[0] == 0) { return 0; }
if (s[1] == '0') {
dp[1] = decode(s, 1) ? 1 : 0;
} else {
dp[1] = decode(s, 1) ? 2 : 1;
}
if (dp[1] == 0) { return 0; }
for (int i = 2; i < n; i++) {
bool decoded = decode(s, i);
dp[i] = (s[i] == '0') ? (decoded ? dp[i - 2] : 0) : (decoded ? (dp[i - 2] + dp[i - 1]) : dp[i - 1]);
if (dp[i] == 0) { return 0; }
}
return dp[n - 1];
}
LeetCode #91 Decode Ways
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 91 Decode Ways 解码方法 Description:A message containing lett...
- 原题 有一个消息包含A-Z通过以下规则编码 现在给你一个加密过后的消息,问有几种解码的方式 样例给你的消息为12,...
- 题目 给定一个字符串, 字符串元素都是数字. 数字和字母有对应关系'A' -> 1, 'B'->2,...,'Z'...
- LeetCode 91 Decode Ways A message containing letters from...
- 1 使用动态规划来解 2 这里额外的空间就是dp[i-1]和dp[i-2],时间复杂度是O(n) 3 有时候只需要...