当前位置: 首页 > news >正文

算法--js--电话号码的字母组合

题:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

function letterCombinations (digits){if (!digits.length) return [];// 数字到字母的映射表const strMap = new Map([['2', 'abc'], ['3', 'def'], ['4', 'ghi'], ['5', 'jkl'], ['6', 'mno'], ['7', 'pqrs'], ['8', 'tuv'], ['9', 'wxyz']]); let result = [''];for (const digit of digits) {const letters = strMap.get(digit);const temp = [];// 笛卡尔积计算:当前组合数 × 新字母数for (const str of result) {for (const letter of letters) {temp.push(str + letter);}}result = temp; // 更新组合结果}return result;
};// 示例测试
console.log(letterCombinations('23')); 
// 输出: ["ad","ae","af","bd","be","bf","cd","ce","cf"]
console.log(letterCombinations(''));    // 输出: []
console.log(letterCombinations('7'));  // 输出: ["p","q","r","s"]

算法解析

时间复杂度: O(3^N × 4^M)
N 为输入中对应3字母的数字个数(2,3,4,5,6,8)
M 为对应4字母的数字个数(7,9)
例如输入"279"的复杂度为 O(3×4×4) = 48

空间复杂度: O(K)
K 为最终结果的数量,与时间复杂度相同量级

核心优化点
动态扩展组合:通过迭代而非递归,减少调用栈开销
内存复用:每次循环复用 temp 数组,避免内存碎片
即时计算:无需预计算所有可能性,逐层生成结果

边界处理
输入为空字符串时直接返回空数组
单个数字时直接返回对应字母列表
多数字时通过笛卡尔积逐层扩展组合

相关文章:

  • 免费使用GPU的探索笔记
  • FFmpeg中使用Android Content协议打开文件设备
  • centOS8修改网络设置换成固定IP ping不同
  • LeetCode热题100:Java哈希表中等难度题目精解
  • L53.【LeetCode题解】二分法习题集2
  • LangGraph(五)——自定义状态
  • AI练习:混合圆
  • [论文精读]Ward: Provable RAG Dataset Inference via LLM Watermarks
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(5)
  • redis--redisJava客户端:Jedis详解
  • 《MQTT 从 0 到 1:原理、实战与面试指南全解》
  • 学习 Android(十一)Service
  • 一文详解并查集:从基础原理到高级应用
  • ctfhub技能书http协议
  • 人工智能小白转型学习指南
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月21日第84弹
  • java:找不到符号 java.util.0ptional<com.auth0.jwt.interfaces.DecodedJWT>
  • P1090 [NOIP 2004 提高组] 合并果子
  • SpringAI开发SSE传输协议的MCP Server
  • 信息系统项目管理师考前练习1