题目描述:
一条包含字母 A-Z
的消息通过以下方式进行了编码:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
给定一个只包含数字的非空字符串,请计算解码方法的总数。
示例 1:
输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
示例 2:
输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
说明:
本题其实不难,只不过边界情况比较多,自己做了好长时间,始终是没有考虑全。
一开始就直接想到了info[i]=info[i-1]+info[i-2],以及少数边界情况,可惜始终没有作对。看了一下别人的解答,把采用下面的这种方式,不去一一罗列每一种情况,将是否加info[i-1]或者info[i-2]分开。这就好很多了。
解答:
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
if(s.empty()) return 0;
if(s[0]=='0') return 0;
vector<int> info(n+1,0);
info[0]=1;
info[1]=1;
for(int i=2;i<n+1;++i)
{
if(s[i-1]!='0') info[i]+=info[i-1];
if(s.substr(i - 2, 2) <= "26" && s.substr(i - 2, 2) >= "10") info[i]+=info[i-2];
}
return info[n];
}
};
参考: