一、题目
二、分析
三、代码
class Solution {
public:
int numDecodings(string s) {
int n = s.size();
vector<int>dp(n, 0);
if (n == 0)
return 0;
if (n == 1)
{
if (s[0] != '0')
dp[0] = 1;
else
dp[0] = 0;
return dp[0];
}
if (n == 2)
{
if (s[0] != '0' && s[1] != '0')//第一个字符和第二个字符都能被单独解码
{
dp[1] = 1;
}
int x = 10 * (s[0] - '0') + s[1] - '0';
if (x <= 26 && x >= 10)
dp[1] = dp[1] + 1;
return dp[1];
}
//字符数大于等于3的时候
//初始化dp[0]
if (s[0] != '0')
dp[0] = 1;
else
dp[0] = 0;
//初始化dp[1]
if (s[0] != '0' && s[1] != '0')//第一个字符和第二个字符都能被单独解码
{
dp[1] = 1;
}
int x = 10 * (s[0] - '0') + s[1] - '0';
if (x <= 26 && x >= 10)
dp[1] = dp[1] + 1;
for (int i = 2; i < n; i++)
{
if (s[i] != '0')
dp[i] = dp[i - 1];
int y = 10 * (s[i - 1] - '0') + s[i] - '0';
if (y <= 26 && y >= 10)
dp[i] = dp[i] + dp[i - 2];
}
return dp[n - 1];
}
};