题目描述
给定一个仅包含数字 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 <= 4digits[i]是范围['2', '9']的一个数字。
解题思路
- 可以dfs遍历,比较基础。
func letterCombinations(digits string) []string {
if len(digits) == 0 {
return []string{}
}
return getAns(digits, []string{""})
}
var ntos = map[byte][]string{
'2': {"a", "b", "c"},
'3': {"d", "e", "f"},
'4': {"g", "h", "i"},
'5': {"j", "k", "l"},
'6': {"m", "n", "o"},
'7': {"p", "q", "r", "s"},
'8': {"t", "u", "v"},
'9': {"w", "x", "y", "z"},
}
func getAns(s string, strs []string) []string {
if len(s) == 0 {
return strs
}
nstrs := make([]string, 0)
for _, str := range strs {
for _, ss := range ntos[s[0]] {
nstrs = append(nstrs, str+ss)
}
}
return getAns(s[1:], nstrs)
}