此题使用动态规划的方法解答,很容易得出递归方程。
int numDecodings(string s) {
int n=s.size();
if(0==n||(1==n&&'0'!=s[0]))return n;
if('0'==s[0]) return 0;
vector<int>dp(n+1,0);
dp[0]=dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=('0'!=s[i-1])*dp[i-1]+('1'==s[i-2]||('2'==s[i-2]&&'6'>=s[i-1]))*dp[i-2];
}
return dp[n];
}
程序实现时,注意下标。