题解 | #把数字翻译成字符串#

把数字翻译成字符串

https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668?tpId=295&tqId=1024831&ru=%2Fpractice%2F7d21b6be4c6b429bb92d219341c4f8bb&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

考虑边界条件(鲁棒性)

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];
    }
};
全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务