原来用深度优先搜索,结果超时了。
看看觉得和斐波那契数列如此相似,动态规划。
果然。
class Solution {
public:
int numDecodings(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len=s.length();
if(len<=0) return 0;
vector<int> nums(len+2);
nums[len]=1;
int k=len-1;
if(s[k]>'0') nums[k]=1;
for(int i=len-2;i>=0;i--)
{
if(s[i]=='0') nums[i]=0;
else if(s[i]=='1')
{
if(s[i+1]!='0') nums[i]=nums[i+1]+nums[i+2];
else nums[i]=nums[i+2];
}
else if(s[i]=='2')
{
if(s[i+1]>'0'&& s[i+1]<='6') nums[i]=nums[i+1]+nums[i+2];
else if(s[i+1]=='0') nums[i]=nums[i+2];
else nums[i]=nums[i+1];
}
else
{
if(s[i+1]=='0') nums[i]=0;
else nums[i]=nums[i+1];
}
}
return nums[0];
}
};