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

把数字翻译成字符串

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过程

全部评论

相关推荐

代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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