当前位置: 首页 > 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 数组,避免内存碎片
即时计算:无需预计算所有可能性,逐层生成结果

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

http://www.xdnf.cn/news/577729.html

相关文章:

  • Manus与DeepSeek 的区别
  • 从0开始学linux韦东山教程第四章问题小结(2)
  • Java异步编程利器:CompletableFuture 深度解析与实战
  • 【C++ Primer 学习札记】函数传参问题
  • 轻量级高性能Rust HTTP服务器库Hyperlane,助力现代网络服务开发
  • C++:vector容器
  • 心知天气 API 获取天气预报 2025/5/21
  • QML定时器Timer和线程任务WorkerScript
  • 大模型评测与可解释性
  • Day 27 训练
  • Linux中的文件介绍
  • 通过美图秀秀将多张图片合并
  • 【UEFI实战】BIOS编译过程中报错“无法解析的外部符号memcpy”
  • 七: NumPy的使用
  • vue+srpingboot实现多文件导出
  • Unity中GPU Instancing使用整理
  • Python训练Day30
  • 第3周作业-1层隐藏层的神经网络分类二维数据
  • MQTT报文介绍
  • Linux内存分页管理详解
  • Jsoup解析商品信息具体怎么写?
  • 阿里发布扩散模型Wan VACE,全面支持生图、生视频、图像编辑,适配低显存~
  • FreeCAD傻瓜教程-外螺纹的绘制,利用两个实体进行布尔运算来实现
  • 《P1433 吃奶酪》
  • MCU开发学习记录19* - CAN学习与实践(HAL库) - 定时传输、触发传输和请求传输(轮询与中断实现) -STM32CubeMX
  • Python 代码缩进与结构化编程:从基础到风格规范
  • Robotaxi新消息密集释放,量产元年来临谁在领跑?
  • [Java恶补day2] 49. 字母异位词分组
  • 【SW】从3D模型导出dxf图纸
  • 【算法专题十五】BFS解决最短路问题