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:
int numDecodings(string s) {
int len=s.size();
if(len==0)
return 0;
if(s[0]=='0') //只要第一位为0 就退出,不用len==1!!!!!!!!
return 0;
//多存储一个 如 12 从没有 跳两位一种方法,一位一位跳一种方法i=1时, flags[i +1] = flags[i-1 +1]+flags[i-2 +1]
// flags[1……len] 对应 s[0-len-1] 的状态 ,【所以flags的index 要比s的加1】
vector
flags(len+1,1);
for(int i=1;i
'0') // 两位或者一位来解释都可以
flags[i +1]=flags[i-1 +1]+flags[i-2 +1];
else{ // s[i]==0
flags[i +1]=flags[i-2 +1]; // 110 ,220 后两位 都只有按照两位来解释 ,不能拆开;
flags[i-1 +1]=0;
}
}
else{ // 按照1位来解释
if(s[i]>'0' && s[i]<='9')
flags[i +1]=flags[i-1 +1];
else // s[i]=='0' 并且只能按照1位来解释,那就没有不能解释了
return 0;
}
}
return flags[len];
}
};