LeetCode-热题100:17.电话号码的字母组合

题目描述

给定一个仅包含数字 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'] 的一个数字。

代码及注释

go 复制代码
func letterCombinations(digits string) []string {
    // 定义数字对应的字母映射表
    m := []string{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}

    // 初始化结果切片和当前路径切片
    res, path := make([]string, 0), make([]byte, 0)

    // 如果输入的数字字符串为空,则直接返回空结果切片
    if digits == "" {
        return res
    }

    // 定义深度优先搜索函数
    var dfs func(digits string, pos int)
    dfs = func(digits string, pos int) {
        // 如果当前位置已经遍历到数字字符串的末尾
        if pos == len(digits) {
            // 将当前路径切片转换为字符串,并添加到结果切片中
            tmp := string(path)
            res = append(res, tmp)
            return
        }

        // 获取当前位置对应的数字,并获取其对应的字母字符串
        digit := int(digits[pos] - '0')
        str := m[digit-2]

        // 遍历当前数字对应的字母字符串中的每个字母
        for i := 0; i < len(str); i++ {
            // 将当前字母添加到路径切片中,并继续深度优先搜索下一个位置的数字
            path = append(path, str[i])
            dfs(digits, pos+1)
            // 回溯,将当前字母从路径切片中移除
            path = path[:len(path)-1]
        }
    }

    // 从第一个位置开始进行深度优先搜索
    dfs(digits, 0)

    // 返回结果切片
    return res
}
相关推荐
sylviiiiiia9 分钟前
Leetcode hot100 多数元素/相交链表/反转链表
算法·leetcode·链表
CoderYanger12 分钟前
A.每日一题:3622. 判断整除性
java·程序人生·算法·leetcode·面试·职场和发展·蓝桥杯
rannn_11121 分钟前
【力扣hot100】动态规划专题|70、118、198、279、322、139、300、152、416、32
算法·leetcode·动态规划
渡之22 分钟前
ArduPilot(APM)滤波器之 HarmonicNotchFilter 深度解析
算法·无人机
我不会起名字32222 分钟前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
lvwangshu1 小时前
exBSGS 算法
数学·算法
不会就选b1 小时前
算法日常・每日刷题--<贪心+大根堆>2
数据结构·算法
码艺-Alimjan1 小时前
维吾尔语数字转文本
java·javascript·python·算法·go
AI服务老曹1 小时前
算法任务配置完整流程:明厨亮灶项目从0到1怎么做 | AI视频分析算法实践
人工智能·算法·音视频
gsls2008081 小时前
告别 Vault 的复杂度:用 Go 标准库给 Windows 凭据管理器装上 MCP
windows·golang·mcp