【LC】Offer46把数字翻译成字符串
浏览 279 | 评论 0 | 字数 816
TTQ
2022年04月25日
  • 原题链接:https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/

    描述

    给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

    思路

    此题与牛客上的题类似,区别在于:输入为数字,可能需要转为字符串处理(显然数据也水得多);0代表a,不再需要考虑0无法翻译的问题。也就是说这道题要更简单一些,只需要稍作改动即可。
    不过由于此题不需要考虑单个数字能否翻译的问题,代码可以进一步简化:只需要考虑两个数一组能不能翻译,如果可以则dp[i]=dp[i-1]+dp[i-2],否则dp[i]=dp[i-1],而此时容易看出,对于每一步的结果只与前两步的结果有关,因此只需要三个变量作滚动数组即可。

    代码

    var translateNum = function (num) {
      const _num = num.toString();
      let p = 1;
      let q = 1;
      let r = 1;
      for (let i = 1; i < _num.length; i++) {
        // 可以组合两位
        if (
          10 <= parseInt(_num[i - 1] + _num[i]) &&
          parseInt(_num[i - 1] + _num[i]) <= 25
        )
          r = p + q;
        p = q;
        q = r;
      }
      return r;
    };
    本文作者:TTQ
    本文链接:https://blog.ponder.fun/archives/153.html
    最后修改时间:2022-04-25 18:06:20
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论
    与本文无关评论请发留言板。请不要水评论,谢谢。
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    暂无评论