Loading

Leetcode - 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'] 的一个数字。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解1 2021/8/29 O(n4)

def letterCombinations(digits: str) -> list:
    # 这题限制了digits.length<=4,而且每个按键最多才4个数,暴力先看看超不超时
    d={
        '2': 'abc',
        '3': 'def',
        '4': 'ghi',
        '5': 'jkl',
        '6': 'mno',
        '7': 'pqrs',
        '8': 'tuv',
        '9': 'wxyz',
    }
    len=digits.__len__()
    if len==0: return []
    if len==1: return [x for x in d[digits[0]]]
    res=[]
    if len==2:
        for x in d[digits[0]]:
            for y in d[digits[1]]:
                res.append(x+y)
    if len==3:
        for x in d[digits[0]]:
            for y in d[digits[1]]:
                for z in d[digits[2]]:
                    res.append(x+y+z)
    if len==4:
        for x in d[digits[0]]:
            for y in d[digits[1]]:
                for z in d[digits[2]]:
                    for k in d[digits[3]]:
                        res.append(x+y+z+k)
    return res

if __name__ == '__main__':
    print(letterCombinations(""))
    print(letterCombinations("2"))
    print(letterCombinations("7"))
    print(letterCombinations("23"))
    print(letterCombinations("723"))
    print(letterCombinations("2723"))

posted @ 2021-08-29 16:04  wwcg2235  阅读(36)  评论(0)    收藏  举报