class Solution {
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
//从左到右的试法
//nums[index..]的转换方法数
//可变参数index
// int process(string nums,int index){
// if(index==nums.length())
// return 1;
// if(nums[index]=='0')
// return 0;
// int res=process(nums, index+1);
// if(index+1<nums.length()&&((nums[index]-'0')*10+nums[index+1]-'0'<27)){
// res+=process(nums, index+2);
// }
// return res;
// }
int solve(string nums) {
// write code here
if(nums==""||(nums.length()==1&&nums[0]=='0'))
return 0;
if(nums.length()==1)
return 1;
//首先需要一个长度为nums.lenth()+1的dp数组
int dp[nums.length()+1];
//根据base case 最后一个位置的值为1
dp[nums.length()]=1;
//对于一个普遍位置,他需要后面一个或两个的值
//所以需要从后往前遍历dp数组
for(int i=nums.length()-1;i>=0;i--){
if(nums[i]=='0'){
dp[i]=0;
continue;
}
dp[i]=dp[i+1];
if(i+1<nums.length()&&((nums[i]-'0')*10+nums[i+1]-'0'<27)){
dp[i]+=dp[i+2];
}
}
return dp[0];
}
};
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
//从左到右的试法
//nums[index..]的转换方法数
//可变参数index
// int process(string nums,int index){
// if(index==nums.length())
// return 1;
// if(nums[index]=='0')
// return 0;
// int res=process(nums, index+1);
// if(index+1<nums.length()&&((nums[index]-'0')*10+nums[index+1]-'0'<27)){
// res+=process(nums, index+2);
// }
// return res;
// }
int solve(string nums) {
// write code here
if(nums==""||(nums.length()==1&&nums[0]=='0'))
return 0;
if(nums.length()==1)
return 1;
//首先需要一个长度为nums.lenth()+1的dp数组
int dp[nums.length()+1];
//根据base case 最后一个位置的值为1
dp[nums.length()]=1;
//对于一个普遍位置,他需要后面一个或两个的值
//所以需要从后往前遍历dp数组
for(int i=nums.length()-1;i>=0;i--){
if(nums[i]=='0'){
dp[i]=0;
continue;
}
dp[i]=dp[i+1];
if(i+1<nums.length()&&((nums[i]-'0')*10+nums[i+1]-'0'<27)){
dp[i]+=dp[i+2];
}
}
return dp[0];
}
};