原题链接:Leetcode 91. 解码方法
自己写的代码:
class Solution {
public:int numDecodings(string s) {int n=s.size();vector<int> dp(n,1);if(s[n-1]=='0') dp[n-1]=0;for(int i=n-2;i>=0;i--){if(s[i]!='0'){string t=s.substr(i,2);int tmp=atoi(t.c_str());if(tmp>=1&&tmp<=26) dp[i]=dp[i+1]+(i+2<n ? dp[i+2]:1);else dp[i]=dp[i+1];}else {if(i-1>=0 && (s[i-1]=='1' || s[i-1]=='2')){dp[i]=0;dp[i-1]=dp[i+1];i--;}else return 0;}}return dp[0];}
};
参考别人的代码:Leecode 91. 解码方法
class Solution {
public:int numDecodings(string s) {int n=s.size();if(s[0]=='0') return 0;int res=1,pre=1;for(int i=1;i<n;i++){int tmp=res;if(s[i]=='0'){if(s[i-1]=='1' || s[i-1]=='2') res=pre;else return 0;}else if(s[i-1]=='1' || (s[i-1]=='2' && s[i]>='1' && s[i]<='6'))res+=pre;pre=tmp;}return res;}
};