LeetCode-91-解码方法

一条包含字母 A-Z 的消息通过以下方式进行了编码:

1
2
3
4
'A' -> 1
'B' -> 2
...
'Z' -> 26

给定一个只包含数字的非空字符串,请计算解码方法的总数。

示例 1:

1
2
3
输入: "12"
输出: 2
解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。

示例 2:

1
2
3
输入: "226"
输出: 3
解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//时间复杂度O(N)
//空间复杂度O(N)
class Solution {
public:
int numDecodings(string s) {
int len = s.size();
vector<int> dp(len+1,0);
//因为所给字符串为非空字符串,dp[0]位置设为1仅为了头两位是合法数字如"24"提供作用
dp[0]=1;
//dp其他所有位置都是默认初始化为0
//当字符串为"0"时,返回0
if(s[0]!='0')
dp[1]=1;
for(int i=2;i<=len;i++){
//当前位置不为0,则解码方式与前一位的解码方式相同
if(s[i-1]!='0')
dp[i]=dp[i-1];
int current = (s[i-2]-'0')*10+(s[i-1]-'0');
//两位数在合法的数字区间内,则dp[i]为单独一位的方式数+两位的方式数
if(current>9&&current<27)
dp[i]+=dp[i-2];
}
return dp[len];
}
};

----\(˙<>˙)/----赞赏一下吧~