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

把数字翻译成字符串

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

public:
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
       /**
     *
     * dp[i] 表示 前 i 位 可以解码的总数
     *
     * 分两种情况:
     *
     * 1. 第i位数字 无法和前面的数组合,
     *    比如 1245, 5 只能单独翻译,那么方法数和 124 是一样的
     *    dp[i] = dp[i - 1]
     *
     * 2.第i位数字 可以和前面的数组合,
     *   比如 1215, 5 可以选择 组合 和 不组合,最终结果为两种情况相加
     *   a. 选择组合,15看成是整体,那么 dp[i] = dp[i - 2]
     *   b. 不选择组合,5单独翻译,那么 dp[i] = dp[i - 1]
     *
     *
     */
    int solve(string nums) {
        // write code here
        if(nums.size()==0||nums[0]=='0'){
            return 0;
        }
        for(int i=1;i<nums.size();i++){
            if(nums[i]=='0'&&(nums[i-1]=='0'||nums[i-1]>='3')){//排除100,160这样的结果
                return 0;
            }
        }
        int dp[100];
        dp[0]=1;
        for(int i=1;i<nums.size();i++){
            if((nums[i-1]=='1'||nums[i-1]=='2')&&nums[i]=='0'){//特殊数字10 20
                if(i==1){
                    dp[i]=1;
                }else{
                    dp[i]=dp[i-2];
                }
                continue;
            }
            if((nums[i-1]=='1')||(nums[i-1]=='2'&&nums[i]<='6')){
                if(i==1){
                    dp[1]=2;
                }else{
                    dp[i]=dp[i-1]+dp[i-2];
                }          
            }
            else{
                dp[i]=dp[i-1];
            }
        }
        return dp[nums.size()-1];
    }
};
全部评论

相关推荐

06-13 12:13
已编辑
东北大学 射频工程师
26毕业的,日常实习还能找到吗
求实习的青提很想去大厂:目前应该还有hc吧,腾讯感觉还有hc,最近捞了我好几次,因为目前有offer,所以不准备面了,可以再找找,不行的话就找找中小厂试试,因为我之前也找了好久,准备放弃了,结果有个岗位流程特别顺利,然后就oc,只能说坚持下试试,万一呢💪
点赞 评论 收藏
分享
AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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