考虑边界条件(鲁棒性)

class Solution {
public:
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    int solve(string nums) {
      //  dp[i] 表示长度为 i 的字符串有 多少种可能译码结果
      if (nums.empty() || nums[0] == '0') {
        return 0;
      }
      
      int size = nums.size();
      
      for (int i = 1; i < size; ++i) {
        if (nums[i] == '0') {
          if (nums[i - 1] != '1' && nums[i - 1] != '2') {
            return 0;
          }
        }
      }
      
      std::vector<int> dp(nums.size() + 1, 1);
      
      //  两种译码可能才状态转移,一种情况下不变其数量(以前一位作为当前量)
      for (int i = 1; i < size; ++i) {
        if ((nums[i] != '0' && nums[i - 1] == '1') || (nums[i] > '0' && nums[i] < '7' && nums[i - 1] == '2')) {
          dp[i + 1] = dp[i] + dp[i - 1];
        } else {
          dp[i + 1] = dp[i];
        }
      }
      
      return dp[size];
    }
};