给定一个只包含2-9的数字串,给出这个数字串可能的字符组合
转换规则:九宫格键盘上,每个数字都对应几个字符,找出所有能对应给定数字串的字符组合
例:
输入 :‘23’
输出 : ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]
解法1 (递归法):
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
def func_help(results, digits):
print(digits)
m_result = []
for member in results:
for c in digits:
m_result.append(member + c)
return m_result
digit_map = {'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'}
result = ['']
for n in digits:
if n in digit_map:
result = func_help(result, digit_map[n])
return result
解法2:(利用python内建的itertools.product函数(求笛卡尔积))
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if not digits:
return []
from itertools import product
digit_map = {'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'}
kw_result = [digit_map[i] for i in digits]
result = [ ''.join(v) for v in product(*kw_result)]
return result