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

class Solution {
public:
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    int solve(string nums) {
        // write code here
        if(nums == "0"){//排除0
            return 0;
        }
        if(nums == "10" || nums == "20"){//排除只有一种可能的10 和 20
            return 1;
        }
        ////当0的前面不是1或2时,无法译码,0种
        for(int i = 1; i < nums.size(); i++){
            if(nums[i] == '0'){
                if(nums[i - 1] != '1' && nums[i - 1] != '2'){
                    return 0;
                }
            }
        }
        
        //动态规划
        vector<int> dp(nums.size() + 1, 0);//dp[i]的含义代表长度在i位置时有几种翻译办法
        dp[0] = 1; dp[1] = 1;
        for(int i = 2; i <= nums.size(); i++){
            //在11-19,21-26之间的情况
            if((nums[i - 2] == '1' && nums[i - 1] != '0') || (nums[i - 2] == '2' && nums[i - 1] > '0' && nums[i - 1] < '7')){
                dp[i] = dp[i - 1] + dp[i - 2]; //对于满足两种译码方式(10,20不能)
            }
            else{
                dp[i] = dp[i - 1]; //对于只有一种译码方式的
            }
        }
        
        return dp[nums.size()];
    }
};
全部评论

相关推荐

我就是0offer糕手:北大不乱杀
点赞 评论 收藏
分享
05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务