17. 电话号码的字母组合
2020-02-23 本文已影响0人
十月里的男艺术家
题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
思路:
依次枚举即可
代码:
func letterCombinations(digits string) []string {
if len(digits) == 0 {
return []string{}
}
kv := map[byte][]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"},
}
res := []string{""}
for i := range digits {
d := digits[i]
resLen := len(res)
for j := 0; j < resLen; j++ {
for _, c := range kv[d] {
res = append(res, res[j]+c)
}
}
res = res[resLen:]
}
return res
}
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
kv = {
'1': '',
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz'
}
from functools import reduce
return reduce(lambda acc, d: [x+y for y in kv[d] for x in acc], digits, [''])