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

把数字翻译成字符串

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

从下标0开始,计算当前字符及该字符之前字符串中一共有多少种解码方式;

同理斐波那契,由于每个状态只与前两个状态相关,用两个变量记录,pre记录上一轮结果,cur为当前轮结果;

状态转移有三种情况:

当 当前字符和上一个字符组成两位数时不满足数值在10-26之间时,我们只能把这个数当做单独的数来解码,如3,6组合36比26大了,6只能当做单独的6来解码,0,9组合比10小了,9只能当做单独的数字9来看;

即该轮结果应与上一轮结果一致,cur可不变,pre转为上轮结果:pre =cur

当 当前字符和上一个字符组成两位数满足数值在10-26之间时,就出现两种选择——与前一个字符相组合 | 不组合 ,将两种选择相加即可;

即该轮结果等于上一轮结果与上上轮结果相加:cur = cur + pre;

pre转为上轮结果:pre = cur - pre;

值得注意,当一位数时不能是0,所以在处理一位数时,得把0给搞掉:nums.charAt(i) == '0'?0:cur

import java.util.*;


public class Solution {
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        int pre = 0;//上一轮的结果
        int cur = 1;//当前i下标及之前的字符串的可能组合数
        for (int i = 0; i < nums.length(); i++) {
            if (i == 0
                    || (nums.charAt(i - 1) - '0') * 10 + (nums.charAt(i) - '0') > 26
                    || (nums.charAt(i - 1) - '0') * 10 + (nums.charAt(i) - '0') < 10) {//如果没有构成两位数的条件,则只能将当前数字单独相加
                pre = cur;
                cur = nums.charAt(i) == '0'?0:cur;//若当前单独相加的数字是0,说明根本没有选择
            } else {//可以选择组一位数->cur也可以选择组两位数->pre,将两种情况相加
                cur = (nums.charAt(i) == '0'?0:cur) + pre;//相加时同样要处理一位数是0的情况
                pre = cur - pre;
            }
        }
        return cur;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
442065次浏览 4508人参与
# 春招别灰心,我们一人来一句鼓励 #
41866次浏览 531人参与
# 阿里云管培生offer #
120196次浏览 2219人参与
# 地方国企笔面经互助 #
7957次浏览 18人参与
# 同bg的你秋招战况如何? #
76477次浏览 561人参与
# 虾皮求职进展汇总 #
115376次浏览 886人参与
# 北方华创开奖 #
107421次浏览 599人参与
# 实习,投递多份简历没人回复怎么办 #
2454553次浏览 34856人参与
# 实习必须要去大厂吗? #
55760次浏览 961人参与
# 提前批简历挂麻了怎么办 #
149886次浏览 1977人参与
# 投递实习岗位前的准备 #
1195903次浏览 18548人参与
# 你投递的公司有几家约面了? #
33203次浏览 188人参与
# 双非本科求职如何逆袭 #
662154次浏览 7394人参与
# 如果公司给你放一天假,你会怎么度过? #
4750次浏览 55人参与
# 机械人春招想让哪家公司来捞你? #
157622次浏览 2267人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11525次浏览 284人参与
# 发工资后,你做的第一件事是什么 #
12659次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35779次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20120次浏览 240人参与
# 我的上岸简历长这样 #
451995次浏览 8088人参与
# 实习想申请秋招offer,能不能argue薪资 #
39286次浏览 314人参与
# 非技术岗是怎么找实习的 #
155864次浏览 2120人参与
牛客网
牛客企业服务