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

把数字翻译成字符串

https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668

class Solution {
public:
    int solve(string nums) {
        // write code here
        if(nums.empty()||nums == "0") return 0;//剔除 空和0情况
        if(nums == "10" || nums == "20") return 1;  // 剔除只有一种情况一种情况的两位数
        for(int i = 1; i <= nums.size(); ++i)// 排除0上一位不为1、2情况
        {
            if(nums[i] == '0' && nums[i-1] != '1' && nums[i-1] != '2') return 0;//这里容易搞错,记得都不是1 、2,那么就是就是没法编码。0前面不是1也不是2,那么就不可编码
        }
        vector<int> dp(nums.size()+1, 1);   // 注意个数得加一,否则不好记录最大位置;初始化默认当前编码方式只有一种
        for(int i = 2; i <= nums.size(); ++i)
        {
            if ((nums[i-1] >= '1' && nums[i-1] <= '9' && nums[i-2] == '1') || (nums[i-1] >= '1' && nums[i-1] <= '6' && nums[i-2] == '2')) {// 统计 11-19 、 21-26 可有两种编码情况形式;故计算上次,上上次情况
                dp[i] = dp[i-1] + dp[i-2];
            }else {
                dp[i] = dp[i-1];    // 一种编码方式,则计算只有一种情况
            }
        }
        // std::cout << dp[nums.size()] << std::endl;
        return dp[nums.size()];
    }
};

挤挤刷刷! 文章被收录于专栏

记录coding过程

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务