// 动态规划
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
// write code here
int len = nums.size();
vector<int> dp(len,0);
for(int i=0; i<len; ++i)
{
if(i==0)
{
if(nums[i]=='0')
return 0;
else
dp[i]=1;
}
else
{
// 看看[i-1,i]组成的二位数
int t_num = stoi(nums.substr(i-1,2));
// nums无法译码的情况
if(t_num==0 ||(nums[i]=='0'&&(t_num!=10 && t_num!=20)))
return 0;
// 特殊情况
if(t_num==10 || t_num==20)
{
if(i==1)
dp[i]=1;
else
dp[i] = dp[i-2];
}
// 有两种译码方式
else if(t_num>10 && t_num<27)
{
if(i==1)
dp[i] = 2;
else
dp[i] = dp[i-1]+dp[i-2];
}
// 只有一种译码方式
else
{
dp[i] = dp[i-1];
}
}
}
return dp[len-1];
}
};

京公网安备 11010502036488号