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
相关产品推荐
相关产品推荐

