- 动态规划,定义dp数组,初始化为1;
- 当nums[i-1]='0'时,如果nums[i-2]='1'或'2'时,dp[i]=dp[i-2],否则返回0;
- 当nums[i-1]='1'~'6'时,如果nums[i-2]='1'或'2'时,dp[i]=dp[i+-1]+dp[i-2],否则返回dp[i]=dp[i-1];
- 当nums[i-1]='7'~'9'时,如果nums[i-2]='1'时,dp[i]=dp[i+-1]+dp[i-2],否则返回dp[i]=dp[i-1];
- 遍历完成后,返回最终结果。
class Solution {
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
// write code here
if (nums.size() == 0 || nums[0] == '0') {
return 0;
}
vector<int> dp(nums.size() + 1, 1);
for (int i = 2; i <= nums.size(); i++) {
if (nums[i - 1] == '0') {
if (nums[i - 2] == '1' || nums[i - 2] == '2') {
dp[i] = dp[i - 2];
}
else {
return 0;
}
}
else if (nums[i - 1] >= '1' && nums[i - 1] <= '6') {
if (nums[i - 2] == '1' || nums[i - 2] == '2') {
dp[i] = dp[i - 1] + dp[i - 2];
}
else {
dp[i] = dp[i - 1];
}
}
else {
if (nums[i - 2] == '1') {
dp[i] = dp[i - 1] + dp[i - 2];
}
else {
dp[i] = dp[i - 1];
}
}
}
return dp[nums.size()];
}
};