problem
Given a digit string, return all possible letter combinations that the
number could represent.A mapping of digit to letters (just like on the telephone buttons) is
given below.
Input:Digit string “23” Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”,
“cd”, “ce”, “cf”].
Note: Although the above answer is in lexicographical order, your answer could be in any order you want.
分析
这个问题理解起来不难,关键就在于如何用代码实现乘法原理,下面这种想法就是从前到后逐渐添加遍历字母。还可以使用递归的方法
迭代的方法:
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
dic = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mon', '7':'pqrs', '8':'tuv', '9':'wxyz'}
res = ['']
if digits == '':
return[]
for digit in digits:
tmptres = []
for char in dic[digit]:
for i in res:
tmptres.append(i+char)
res = tmptres
return res
递归方法:
def combination(digits):
dic = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mon', '7':'pqrs', '8':'tuv', '9':'wxyz'}
if len(digits) == 1:
return [x for x in dic[digits]]
else:
latter = combination(digits[1:])
res = []
for char in dic[digits[0]]:
for i in latter:
res.append(char + i)
return res