Note:
状态表示: 用一维表示即可,f[i]
表示以i
个字符进行组合一共有多少种组发
状态转换方程:每个位置,可以是一位进行解码或者是两位进行解码
1、如果是1位进行解码,当前位置不是0即可
2、如果是2位进行解码,前位置不是0并且两个数字加起来比26小即可
代码如下:
class Solution {
public:
int numDecodings(string s) {
int n = s.size();
vector<int> f(n + 1);
f[0] = 1;
for(int i = 1; i <= n; i ++){
if(s[i - 1] != '0')
f[i] += f[i - 1];
if(i > 1 && s[i - 2] != '0' && ( (s[i - 2] - '0') * 10 + (s[i - 1] - '0') ) <= 26 )
f[i] += f[i - 2];
}
return f[n];
}
};