• 动态规划,定义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()];
        
    }
};