要求:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:”23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
class Solution(object):
def letterCombinations(self, digits):
phone = { '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']}
res = []
length = len(digits)
self.dfs("", 0, length, phone, digits, res)
return res
def dfs(self, combination, index, length, phone, digits, res):
if length == index:
res.append(combination)
return
for letter in phone[digits[index]]:
self.dfs(combination+letter, index+1, length, phone, digits, res)
s = Solution()
m = s.letterCombinations('89')
print(m)
全排列
def permutation(ss):
if len(ss)<=1 :
return ss
res = []
dfs("", 0, len(ss), res, ss)
return res
def dfs(combination, index, length, res, ss):
if length == index:
res.append(combination)
return
for i in range(len(ss)):
if ss[i] not in ss[:i]: #这一句可以实现去重,即'aaaa'这种只会打印一个
dfs(combination+ss[i], index+1, length, res, ss[:i]+ss[i+1:])
ss1 = 'mpq'
res = permutation(ss1)
print(res)