// 动态规划 #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]; } };