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

把数字翻译成字符串

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

转载自:NC116把数字翻译成字符串_牛客博客
https://blog.nowcoder.net/n/c0a01037177b4775b632242d8dd02d73?f=comment
基本和上面的一样,这个题解作为自己的思考理解和复习用,感觉写还比较容易懂,欢迎大家交流!

// NC116把数字翻译成字符串
class Solution {
public:
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    int solve(string nums) {
        // write code here
        /* 定义状态:
            dp[i]:以下标为i结尾的字符串的解码方式数
        状态转移:
            1、当nums[i]==0;由于0没有对应解码方式,只能和前一位nums[i-1]组合。且前一位只能为1或者2
                dp[i]=dp[i-2];(i>1) 因为最后两位如果能解码,那么它的解码数量取决dp[i-2],因为最后两位固定了
                dp[i]=1;(i=1) 因为此时只有两位数,能解码的话就只有一种方式
            2、当nums[i]!=0;
                分析2.1、当nums[i-1]为1的时候,满足要求
                分析2.2、当nums[i-1]为2的时候,判断下nums[i]是否在1-6之间,因为>26的数无法解码
                dp[i]=dp[i-1]+dp[i-2];//因为在11-26之间(20在上面已经判断完了),可以组合解码,也可以单个解码
            3、初始化
                dp[0]=1;
            4、结果返回
                dp[n-1];n为nums的长度
                 */

            //注意nums中的是字符,要注意字符转数字的方式    
        int len=nums.size();
        if(len==0) return 1;
        if(nums[0]=='0') return 0;
        vector<int>dp(len);
        dp[0]=1;
        for(int i=1;i<len;++i){
            // 如果是0结尾
            if(nums[i]=='0'){
                // 如果前一位是1或者2,也就是能组合解码
                if( nums[i-1]=='1' || nums[i-1]=='2' ){    
                    if(i==1) 
                        dp[i]=1;//如果只有两位
                    else
                        dp[i]=dp[i-2];
                }
                //如果前一位不是1或者2,那这串就解码不了,默认0    
            }else{
                //如果nums[i]!=0;
                if(  nums[i-1]=='1' || (nums[i-1]=='2' && nums[i]>='1' && nums[i]<='6' )  ){
                    if(i==1)
                        dp[i]=2;
                    else
                        dp[i]=dp[i-1]+dp[i-2];
                }else{
                    // 如果是其他条件,如果xxxx37;就只能拆开
                    dp[i]=dp[i-1];
                }
            }
        }
        return dp[len-1];
    }
};
全部评论

相关推荐

昨天 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
牛客52811839...:有的hr就是这样啊,很正常。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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