essay

hot100-电话号码的字母组合

#算法

hot100——电话号码的字母组合

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

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

image.png

示例 1:

输入:digits = "23"

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

示例 2:

输入:digits = "2"

输出:["a","b","c"]

提示:

1 <= digits.length <= 4

digits[i] 是范围 ['2', '9'] 的一个数字。

解法

// 数字到字母的映射表,全局常量
var phoneMap = map[byte]string{
    '2': "abc",
    '3': "def",
    '4': "ghi",
    '5': "jkl",
    '6': "mno",
    '7': "pqrs",
    '8': "tuv",
    '9': "wxyz",
}
 
// letterCombinations 返回所有可能的字母组合
func letterCombinations(digits string) []string {
    if len(digits) == 0 {
        return []string{}
    }
    res := make([]string, 0)
    backtrack(digits, 0, "", &res)
    return res
}
 
// backtrack 是递归回溯函数
// digits: 输入的数字字符串
// index: 当前处理到的数字位置
// cur: 当前已经构建的字母组合(字符串)
// res: 指向结果集的指针
func backtrack(digits string, index int, cur string, res *[]string) {
    // 递归终止:已经处理完所有数字,将当前组合加入结果集
    if index == len(digits) {
        *res = append(*res, cur)
        return
    }
    // 获取当前数字对应的字母串
    letters := phoneMap[digits[index]]
    // 遍历每个可能的字母
    for i := 0; i < len(letters); i++ {
        // 将当前字母附加到 cur 上,递归处理下一个数字
        // 注意:cur + string(letters[i]) 会产生新字符串,无需显式回溯
        backtrack(digits, index+1, cur+string(letters[i]), res)
    }
    // 没有显式的撤销操作,因为每次递归传递的是新字符串值
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接