电话号码的字母组合
给定一个仅包含数字 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'] 的一个数字。
Related Topics 哈希表 字符串 回溯 👍 2805 👎 0
解题思路:
- 构建映射表: 首先,我们需要建立一个数字到字母的映射表,例如 2 对应 abc,3 对应 def 等等。
- 定义回溯函数: 该函数接受当前组合字符串和剩余数字作为参数。
- 递归搜索:
- 如果没有剩余数字,则将当前组合添加到结果列表中并返回。
- 否则,遍历当前数字对应的字母:
- 将当前字母添加到组合字符串中。
- 对剩余数字进行递归调用。
- 从组合字符串中删除当前字母(回溯)
func letterCombinations(digits string) []string {
// 建立数字到字母的映射关系
mapping := map[byte]string{
'2': "abc",
'3': "def",
'4': "ghi",
'5': "jkl",
'6': "mno",
'7': "pqrs",
'8': "tuv",
'9': "wxyz",
}
var result = []string{}
var backtrack func(res string, nextDigitStr string)
backtrack = func(res string, nextDigitStr string) {
if len(nextDigitStr) == 0 {
result = append(result, res)
return
}
letters := mapping[nextDigitStr[0]]
for _, let := range letters {
backtrack(res+string(let), nextDigitStr[1:])
}
}
backtrack("", digits)
return result
}