Evan Wang
Evan WangFrontEnd Developer
  • Evan Wang
    Evan WangFrontEnd Developer
  • 前端相关
  • 算法题
  • 日常笔记
  • Chat With AI

两数之和
两数相加
无重复字符的最长子串
最长回文子串
盛水最多的容器
三数之和
电话号码的字母组合
有效括号
合并两个有序链表
括号生成
下一个排列
搜索旋转排序数组
在排序数组中查找元素的第一个和最后一个位置
删除链表的倒数第n个节点
组合总和
全排列
旋转图像
字母异位词分组
最大子数组合
跳跃游戏
反转链表
反转链表2
合并区间
最小路径和
编辑距离
颜色分类
爬楼梯
组合
子集
不同的二叉搜索树
验证二叉搜索树
对称二叉树
二叉树的层序遍历
二叉树的最大深度
从前序与中序遍历序列构造二叉树
只出现一次的数字
二叉树展开为链表
最长连续序列
单词拆分
环形链表
环形链表2
排序链表
相交链表
乘积最大子数组
最小栈
多数元素
打家劫舍
数组中重复的数据
二叉树的中序遍历
卖股票的最佳时机
数组中的第K个最大元素

  1. Articles
  1. More
  2. 7-电话号码的字母组合.mdx
目录
题目思路代码
1459 字
约 4 分钟
更新于 2026/08/20

电话号码的字母组合

题目

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

电话号码的字母组合-图片

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

思路:

  • 先将输入的数字和对应的字母之间建立映射关系。
  • 假如输入的是’23‘,题目的意思是从 abc 中取一个字母, 和 def 中取一个字母,组成结果返回。
    • 如果输入的是'234' ,将 '34'看成一个整体,即:从 2 对应的字母中选一个和 34 对应的字母中选一个,形成组合,然后再把 34 分开看,和上面的情况一样。
    • 所以,可以使用递归。
  • 递归函数接受一个字符串 currentStr,和一个 index ,index 表示当前 digits 的下标,
    • 当 index 大于 digits.length 的时候,结束循环,存储当前的字符串。
    • Index 小于 digits.length 时,取出当前 index 对应的字符串: digits[index] , 循环 digits[index] ,每个字母都和 currentStr 结合,并且把 index 加 1,

代码:

const letterCombinations = (digits) => {
        if (digits.length <= 0) return [];
 
        const result = [];
        const letterMap = new Map([
            ['2', 'abc'],
            ['3', 'def'],
            ['4', 'ghi'],
            ['5', 'jkl'],
            ['6', 'mno'],
            ['7', 'pqrs'],
            ['8', 'tuv'],
            ['9', 'wxyz']
        ])
 
        const getStr = (currentStr, index) => {
            if (index > digits.length - 1) {
                result.push(currentStr);
                return;
            }
            const letterStr = letterMap.get(digits[index]); // 取出 index 对应的字符串
          
            for (let key of letterStr) { // 循环字符串,用 currentStr 和 每个字符串进行拼接,递归获取后面 index 对应的字符串
                getStr(currentStr + key, index + 1);
            }
        }
        getStr('', 0);
        return result;
    }