【每天学习一点算法 2026/03/16】电话号码的字母组合

每天学习一点算法 2026/03/16

题目:电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

我们可以把每个数字对应的字母情况当做树的节点,然后统计路径结构即可。

比如,'26',对应 a b cm n o,对应树结构如下:

复制代码
          ' '
    /      |      \
   a       b       c
 / | \   / | \   / | \
m  n  o m  n  o m  n  o

这种结构就好处理多了,我们遍历所有路径统计结果就行了。

typescript 复制代码
function letterCombinations(digits: string): string[] {
  // 数字字母映射表
  const dist = {
    '2': ['a', 'b', 'c'],
    '3': ['d', 'e', 'f'],
    '4': ['g', 'h', 'i'],
    '5': ['j', 'k', 'l'],
    '6': ['m', 'n', 'o'],
    '7': ['p', 'q', 'r', 's'],
    '8': ['t', 'u', 'v'],
    '9': ['w', 'x', 'y', 'z'],
  }
  const resArr = [] // 结果数组
  // 递归辅助函数
  function helper (digits: string, index: number, str: string) {
    if (index === digits.length) {
      // 当前路径走到末尾 记录结果并回归
      resArr.push(str)
      return
    }
    const letters = dist[digits[index]] // 获取当前数字对应的字母
    for (let i of letters) {
      // 记录当前digits索引和结果字符串
      let currentIndex = index
      let currentStr = str
      // 更新digits索引和结果字符串传入下一层递归
      currentStr += i
      currentIndex++
      helper(digits, currentIndex, currentStr)
    }
  }
	// 初始传入指针和空字符串
  helper(digits, 0, '')

  return resArr
};

题目来源:力扣(LeetCode)

相关推荐
兰令水23 分钟前
leecodecode【面试150】【2026.6.14打卡-java版本】
java·算法·面试
noipp7 小时前
推荐题目:洛谷 P10907 [蓝桥杯 2024 国 B] 蚂蚁开会
c语言·c++·算法·编程·洛谷
程序员二叉8 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
青山木8 小时前
Hot 100 --- 轮转数组
java·数据结构·算法
徐小夕9 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
北域码匠10 小时前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
袁小皮皮不皮10 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
手写码匠10 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
装不满的克莱因瓶10 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
BomanGe110 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书