利用动态规划的思路,到某点的可能组合数是这点向前一位的点的组合加上这个点向前两位的点的组合(如果前两位在[1,26]的范围内),其中,F(1) = 1。
时间复杂度:O(N)
C++代码:
class Solution {
public:
int numDecodings(string s) {
if (s.empty())
return 0;
vector<int> record(s.length() + 1,0);
if (s[0] != 0)
record[0] = 1;
else
return 0;
int pos = 1;
while (pos < s.length() + 1)
{
if (s[pos-1] == '0')
record[pos-1] = 0;
else
record[pos] = record[pos - 1];
if (pos > 1 && (s[pos - 2] == '1' || s[pos - 2] == '2' && s[pos - 1] <= '6'))
record[pos] += record[pos - 2];
pos++;
}
return record[pos - 1];
}
};