输入输出示例
Input:Digit string “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
我采用了将输入拆成两部分,然后再把结果加起来的方法,简单粗暴。
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
dic={"0":[" "],"1":["*"],"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"]}
n=len(digits)
if not n :return []
if n==1:return dic[digits]
else:
n/=2
a=self.letterCombinations(digits[:n])
b=self.letterCombinations(digits[n:])
c=[]
for i in a:
for j in b:
c.append(i+j)
return c
如果把上述代码用列表生成式简写一下,变短很多,97%的样子。
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
dic = {"0": [" "], "1": ["*"], "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"]}
n = len(digits)
if not n: return []
if n == 1:
return dic[digits]
else:
n /= 2
return [i+j for i in self.letterCombinations(digits[:n]) for j in self.letterCombinations(digits[n:])]