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 {
if len(digits) == 0 {
return nil
}
m := map[byte]string{
'2':"abc",
'3':"def",
'4':"ghi",
'5':"jkl",
'6':"mno",
'7':"pqrs",
'8':"tuv",
'9':"wxyz",
}
res := make([]string,0)
path := make([]byte,0)
backtracking(digits,m,&res,&path,0)
return res
}
func backtracking(digits string,m map[byte]string,res *[]string,path *[]byte,index int) {
if index == len(digits) {
*res = append(*res,string(*path))
return
}
str := m[digits[index]] // 取数字对应的字符集
for i := 0 ;i < len(str);i++ {
*path = append(*path,str[i]) // 处理
backtracking(digits,m,res,path,index + 1) // 递归,注意index+1,下层递归要处理下一个数字了
*path = (*path)[0:len(*path) - 1] // 回溯
}
}

897

被折叠的 条评论
为什么被折叠?



