虽然不是最优的,但是是自己捣鼓出来的。
此题使用的是动态规划。
1.dp每走一步的时候,默认为0,先判断当前位置的数字是否在1到26之间,这样就可以初始跟前一个位置的个数一致。
2.如果当前数字跟前一个数字合起来在1到26之间,那么dp值在默认值的基础上可以加上前前位置的个数。(特殊情况是没有前前位置不存在,那么加1就可以了,增加了一种可能)
class Solution {
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
// write code here
if(nums.size() == 0){
return 0;
}
int dp[90];
memset(dp, 0, 90 * sizeof(int));
int pre = (nums[0]-'0');
dp[0] = (pre > 0 && pre <= 26) ? 1 : 0;
for(int i=1;i<nums.size();i++){
dp[i] = 0;
int num = (nums[i]-'0');
if(num >= 1 && num <= 26){
dp[i] = dp[i-1];
}
if(pre>0){
num += pre*10;
if(num >= 1 && num <= 26){
if(i>1){
dp[i] += dp[i-2];
}else{
dp[i] += 1;
}
}
}
pre = (nums[i]-'0');
}
return dp[nums.size()-1];
}
};



京公网安备 11010502036488号