一、题目描述

在这里插入图片描述

在这里插入图片描述

二、算法分析

在这里插入图片描述

三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int numDecodings(string s) {
int n = s.size();
vector<int> dp(n + 1, 0);
dp[0] = 1;
for(int i = 1; i <= n; ++i)
{
//单字符解析:当前s[i - 1]字符 非零
if(s[i - 1] != '0')
{
dp[i] = dp[i - 1];
}
//双字符解析:当前字符s[i - 1]+前一个字符s[i - 2]
if(i > 1 && s[i - 2] != '0' && 10 * (s[i - 2] - '0') + s[i - 1] - '0' <= 26)
{
dp[i] += dp[i - 2];
}
}
return dp[n];
}
};

时间复杂度:O(n)
空间复杂度:O(n)