解码方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
int numDecodings(string s) {
int n = s.size();
s = ' ' + s;
vector<int> f(n + 1);
f[0] = 1;
for (int i = 1; i <= n; i++) {
// 如果当前字符是 1 ~ 9,那么可以自己单独形成一种解码方法
if (s[i] >= '1' && s[i] <= '9') f[i] += f[i - 1];
if (i > 1) {
// 如果当前字符与前一个字符连起来的数值在 10 ~ 26,那么可以与之形成一种解码方法
int t = (s[i - 1] - '0') * 10 + (s[i] - '0');
if (t >= 10 && t <= 26) f[i] += f[i - 2];
}
}
return f[n];
}
};