You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现数字解码:按1-26对应A-Z规则生成所有可能字母组合

原有代码错误原因

  • dcrypt 函数内引用了未定义的变量 word,基础逻辑无法运行
  • 自定义的 combinations 函数是用于生成所有长度的子序列,和本题要求的「连续数字拆分、单/双位数值符合1-26范围」的规则完全不匹配,没有做合法性校验,也没有绑定字母映射逻辑。

算法思路

本题是典型的回溯剪枝场景,核心执行逻辑如下:

  • 每次从当前处理位置尝试两种拆分可能:取1位数字、取2位数字
  • 两种拆分都要做合法性校验:
    • 取1位:数值不能为0,范围为1-9
    • 取2位:不能以0开头,整体数值范围为10-26
  • 拆分合法就将对应字母拼到当前结果串中,递归处理剩余的数字串
  • 当递归到数字串末尾时,将当前结果串存入最终返回数组

正确实现代码

function decodeNum(code) {
  const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  const result = [];
  // 回溯函数:入参为当前处理的索引位置、当前拼接的字母串
  const backtrack = (curIndex, curStr) => {
    // 递归终止条件:所有数字处理完成
    if (curIndex === code.length) {
      result.push(curStr);
      return;
    }
    // 尝试取1位数字
    const single = Number(code[curIndex]);
    if (single >= 1 && single <= 9) {
      backtrack(curIndex + 1, curStr + letters[single - 1]);
    }
    // 尝试取2位数字,先判断是否还有下一位
    if (curIndex + 1 < code.length) {
      const double = Number(code[curIndex] + code[curIndex + 1]);
      if (double >= 10 && double <= 26) {
        backtrack(curIndex + 2, curStr + letters[double - 1]);
      }
    }
  }
  backtrack(0, '');
  return result;
}

// 测试用例
console.log(decodeNum('12315'));
// 输出结果排序后和示例完全一致:["ABCAE", "ABCO", "AWAE", "AWO", "LCAE", "LCO"]

内容的提问来源于stack exchange,提问作者uiTeam324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:51:01