leetcode.cn/problems/le…

解法一:回溯法
var digitToCharMap = map[rune][]string{
'2': []string{"a", "b", "c"},
'3': []string{"d", "e", "f"},
'4': []string{"g", "h", "i"},
'5': []string{"j", "k", "l"},
'6': []string{"m", "n", "o"},
'7': []string{"p", "q", "r", "s"},
'8': []string{"t", "u", "v"},
'9': []string{"w", "x", "y", "z"},
}
func letterCombinations(digits string) []string {
var res []string
if len(digits) == 0{
return res
}
path := ""
backtrack(digits, 0, path, &res)
return res
}
func backtrack(digits string, offset int, path string, res *[]string) {
if len(path) == len(digits) {
*res = append(*res, path)
return
}
for i := offset; i<len(digits); i++{
letters, ok := digitToCharMap[rune(digits[i])]
if !ok{
continue
}
for _, s := range letters{
raw := path
path+= s
backtrack(digits, i+1, path, res)
path= raw
}
}
}