Decode Ways My Submissions Question Solution Total Accepted: 47576
Total Submissions: 290697 Difficulty: Medium 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.
题目意思比较容易理解,特殊的有以下几种
(1)00:res[i]=0(无法解析,没有可行解析方式);
(2)10, 20:res[i]=res[i-2](只有第二种情况成立);
(3)11-19, 21-26:res[i]=res[i-1]+res[i-2](两种情况都可行);
(4)01-09, 27-99:res[i]=res[i-1](只有第一种情况可行);
综合上面的,我们可以设计三个变量,a,b,c分别代表i-2,i-1和i处的方式数。
如果num[i-1]>0时我们才c+=b;如果num[i-2]*10+num[i-1]满足大于9且小于27时我们c+=a;
class Solution {
public:
int numDecodings(string s) {
int length = s.size();
if(length==0) return 0;
int a=1;
int b ,c;
if(s[0]=='0') b = 0;
else b = 1;
c=0;
if(length==1) return b;
for(int i = 2; i <=length; ++i){
int num = stoi(s.substr(i-1,1));
if(num>0)//01~09,27~99;11~19,21~26
c = b;
num = stoi(s.substr(i-2,2));
if(num>9&&num<27) //11~19,21~26
c+=a;
a=b;
b=c;
c=0;
}
return b;
}
};
O(n) 4msAC