A message containing letters from A-Z
is being encoded to numbers using the following mapping:
'A' -> 1 'B' -> 2 ... 'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Example 1:
Input: "12" Output: 2 Explanation: It could be decoded as "AB" (1 2) or "L" (12).
Example 2:
Input: "226" Output: 3 Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).
题解:dp问题,可以不用设置dp数组直接用三个变量完成递归即可,关键在于判断各种情况和0的处理,比如两位时第一位必须不能为0还有一个时不能为0
代码:
class Solution {
public:
int numDecodings(string s) {
int dp1=1,dp2=1,dp=1;
if(s[0]=='0') return 0;
for(int i=2;i<=s.size();i++){
string str=s.substr(i-2,2);
int num=stoi(str);
if(num>=10&&num<=26&&s[i-1]!='0'){
dp=dp2+dp1;
}else if(s[i-1]=='0'&&s[i-2]=='0'){
return 0;
}else if(num>=10&&num<=26&&s[i-1]=='0'){
dp=dp2;
}else if(s[i-1]=='0') return 0;
else dp=dp1;
dp2=dp1;dp1=dp;
}
return dp;
}
};