美文网首页leetcode
17. 电话号码的字母组合

17. 电话号码的字母组合

作者: 十月里的男艺术家 | 来源:发表于2020-02-23 08:57 被阅读0次

    题目

    17. 电话号码的字母组合

    给定一个仅包含数字 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, [''])
            
    

    相关文章

      网友评论

        本文标题:17. 电话号码的字母组合

        本文链接:https://www.haomeiwen.com/subject/dupdqhtx.html