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

思路:
1.递归思想
2.ABCDEFG,如果D是0,A不是1和2,那么ABCD无法组合,不能出现30 40 这样的组合。如果A是1或2,10 20 是被允许的,那么组合只能是(AB)(CD) 不考虑AB组合的多少。所以利用dp[i] 来代表第i个位置的组合数量,A是1或2 就为 dp[i] = dp[i-2]
3.如果D是1到6,那么如果C是1到2,是不是可以写成(AB)(CD) 或者(ABC)(D) ,公式就是dp[i] = dp[i-2]+dp[i-1],如果C是3到9,那么只能是(ABC)(D) ,dp[i] = dp[i-1]
4.如果D是7到9,那么C是1的话,组合可以是(ABC)(D)或者(AB)(CD) ,公式 dp[i] = dp[i-1] +dp[i-2],C是2到9,那么只能是(ABC)(D) dp[i] = dp[i-1];



public class Solution {
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        // write code here
        if (nums == null || nums.length() == 0 ) {
            return 0;
        }
        //dp[i] 表示字符串nums中以i位置结尾的前缀字符串的解码种数
        //一种情况是第i位可以独立编码,另一种情况是第i位可以和第i-1位字符组合进行编码
        int[] dp = new int[nums.length() ];
        //dp[0] = 1;
        //第一个数是0 则没有编译的可能
        dp[0] = nums.charAt(0) == '0' ? 0 : 1;


        for (int i = 1; i < nums.length(); i++) {
            if (nums.charAt(i) == '0') {
                //xxx0 只能组合走,强制要前面一个数配合
                if (nums.charAt(i - 1) == '1' || nums.charAt(i - 1) == '2') {
                    if (i == 1) {
                        dp[i] = 1;
                    } else {
                        dp[i] = dp[i - 2];
                    }
                } else {
                    return 0;
                }
            } else if (nums.charAt(i) >= '1' && nums.charAt(i) <= '6') {

                //xx1  xx2   既可以单独作为一种编码,也可以和前面一个数作为一种编码组合
                if (nums.charAt(i - 1) == '2' || nums.charAt(i - 1) == '1') {
                    if (i == 1) {
                        dp[i] = 2;
                    } else {
                        dp[i] = dp[i - 1] + dp[i - 2];
                    }
                } else {
                    //不可能是 31 32  等,所以只能是一种编码方式,单独
                    dp[i] = dp[i - 1];
                }

            } else {
                //7 - 9 xx7
                if (nums.charAt(i - 1) == '1') {
                    if (i == 1) {
                        dp[i] = 2;
                    } else {
                        dp[i] = dp[i - 1] + dp[i - 2];
                    }
                } else {
                    dp[i] = dp[i - 1];
                }

            }
        }
        return dp[nums.length() - 1];
    }
}
全部评论

相关推荐

林后润:听说他们有kpi,要到了简历编号就不理人了
27届求职交流
点赞 评论 收藏
分享
头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
紫炁:一样的感受,现在很混乱尤其业务侧开发和算法界限模糊,不知道秋招投哪个方向了
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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