题目:
A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12"
, it could be decoded as "AB"
(1 2) or "L"
(12).
The number of ways decoding "12"
is 2.
分析:动态规划,考虑当前位一位是否成立,当前位与前一位构成的两位数是否成立。
代码:
class Solution {
public:
bool check(char c){
if(c-'0'>0){
return true;
}
return false;
}
bool check(char c1,char c2){
if((c1=='1')||(c1=='2'&&c2<'7')){
return true;
}
return false;
}
int numDecodings(string s) {
int n=s.size();
if(n==0||s[0]=='0') return 0;
int pre=1;
int cur=1;
int ret=0;
for(int i=1;i<n;i++){
ret=(check(s[i])?cur:0)+(check(s[i-1],s[i])?pre:0);
pre=cur;
cur=ret;
}
return cur;
}
};