Use DP, and be careful about some corner cases.
class Solution {
public:
int numDecodings(string s) {
if(s.empty())
return 0;
if(s.size()==1)
return s[0]=='0'?0:1;
vector<int> dp(s.size(),0);
dp[0]=s[0]>'0'?1:0;
for(int i=1;i<s.size();i++)
{
if((s[i-1]-'0')*10+s[i]-'0'<=26&&(s[i-1]-'0')*10+s[i]-'0'>9)
{
if(i==1)
dp[i]+=1;
else
dp[i]+=dp[i-2];
}
if(s[i]!='0')
dp[i]+=dp[i-1];
}
return dp[s.size()-1];
}
};