一、题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
- 示例 1:
- 输入:digits = “23”
- 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
- 示例 2:
- 输入:digits = “”
- 输出:[]
- 示例 3:
- 输入:digits = “2”
- 输出:[“a”,“b”,“c”]
- 提示:
- 0 ≤ d i g i t s . l e n g t h ≤ 4 0 \leq digits.length \leq 4 0≤digits.length≤4
- digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
二、解决思路和代码
-
解决思路
- 分析题目
- 字母组合 可以根据任意顺序返回
- 0 ≤ d i g i t s . l e n g t h ≤ 4 0 \leq digits.length \leq 4 0≤digits.length≤4
- 思路
- 分析题目
-
代码
from typing import * class Solution: def letterCombinations(self, digits: str) -> List[str]: if digits=='': return [] dict_ = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'} res = [] ## 如果digits长度是奇数,取出最后一个数字对应的字符串 if len(digits)%2==1: res.append(list(dict_[digits[-1]])) ## 如果digits长度是偶数,每次取相邻的两个数字对应的字符进行组合 for i in range(len(digits)//2): ls1 = list(dict_[digits[2*i]]) ls2 = list(dict_[digits[2*i+1]]) res.append([s1+s2 for s2 in ls2 for s1 in ls1]) ## 因为digits.length<=4,所以len(res) = 1 or 2 return res[0] if len(res)==1 else [s1+s2 for s2 in res[1] for s1 in res[0]]