class Solution {
public:
int numDecodings(string s)
{
const int size=s.size();
vector<int> dp(size+1); //dp[i]代表到第i个符号有多少种解码方式
dp[0]=1; //初始化dp[0]为1,为了计算的需要
if(size==0) //如果长度为0,则返回0
return 0;
if(s[0]>='1' && s[0]<='9')
dp[1]=1;
else
dp[1]=0; //如果第一个字符是0,那么dp[1]=0
for(int i=2;i<=size;++i) //对于长度大于1的字符串
{
if(s[i-1]=='0') //如果当前字符是0
{
if(s[i-2]=='1'|| s[i-2]=='2') //判断前一个字符是不是1和2中的一种
dp[i]=dp[i-2];
else
return 0;
}
else //如果当前字符不是0
{
if(s[i-2]=='0'|| s[i-2]>'2') //判断前一个字符是不是1和2中的一种
dp[i]=dp[i-1];
else if(s[i-2]=='1') //判断前一个是不是1
dp[i]=dp[i-1]+dp[i-2];
else if(s[i-2]=='2') //判断前一个是不是2
{
if(s[i-1]>'6')
dp[i]=dp[i-1];
else
dp[i]=dp[i-1]+dp[i-2];
}
}
}
return dp[size];
}
};
Decode Ways
最新推荐文章于 2021-02-16 21:52:55 发布