题目:
代码:
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
int temp,a,b;
if(s[0]=='0') return 0;
a=1;
if(n==1) return 1;
if(s[1]=='0'){
if(s[0]=='1'||s[0]=='2') b=1;
else return 0;
}
else if(s[1]=='7'||s[1]=='8'||s[1]=='9'){
if(s[0]=='1') b=2;
else b=1;
}
else {
if(s[0]=='1'||s[0]=='2') b=2;
else b=1;
}
for(int i=2;i<n;i++){
if(s[i]=='0'){
if(s[i-1]=='1'||s[i-1]=='2') temp=a;
else return 0;
}
else if(s[i]=='7'||s[i]=='8'||s[i]=='9'){
if(s[i-1]=='1') temp=a+b;
else temp=b;
}
else {
if(s[i-1]=='1'||s[i-1]=='2') temp=a+b;
else temp=b;
}
a=b;b=temp;
}
return b;
}
};
思路:采用动态规划,考虑清楚状态转移方程以及初始条件即可。
运行结果: