A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26Given 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.
给定数字串,判断由字母组成的情况的数量。
简单DP,当前位为0,不可能由前一位转移,若前一位为和当前为组合小于26,则可以用之前两位的状态转移。
class Solution {
public:
int numDecodings(string s) {
if(s.empty()) return 0;
vector<int> dp(s.size()+1,0);
dp[0]=1;
if(s[0]!='0') dp[1]=1;
for(int i=1;i<s.size();i++)
{
if(s[i]!='0') dp[i+1]+=dp[i];
if((s[i]>='0' && s[i]<='9' && s[i-1]=='1') || (s[i-1]=='2' && s[i]>='0' && s[i]<='6')) dp[i+1]+=dp[i-1];
}
return dp[s.size()];
}
};