我必须生成所有可能的字母组合,表示电话中的数字序列...例如:如果条目为'423',则输出应为:
GAD GAE GAF GBD GBE GBF GCD GCE GCF
HAD HAE HAF HBD HBE HBF HCD HCE HCF
IAD IAE IAF IBD IBE IBF ICD ICE ICF
Run Code Online (Sandbox Code Playgroud)
我必须使用递归来解决这个问题...我开始使用这样的字典:
dic = {'2' : 'ABC', '3' : 'DEF', '4' : 'GHI', '5' : 'JKL', '6' : 'MNO', '7' : 'PQRS', '8' : 'TUV', '9' : 'WXYZ'}
Run Code Online (Sandbox Code Playgroud)
但是我不知道怎样才能在这里使用递归...有人可以帮忙吗?
我认为这样的事情开头:
def telephoneSequence(str):
for i in range (len(str)):
return dic[str[i]]
Run Code Online (Sandbox Code Playgroud)
mgi*_*son 10
我想你正在寻找itertools.product
:
>>> import itertools
>>> list(itertools.product('GHI','ABC','DEF'))
[('G', 'A', 'D'), ('G', 'A', 'E'), ('G', 'A', 'F'), ('G', 'B', 'D'), ('G', 'B', 'E'), ('G', 'B', 'F'), ('G', 'C', 'D'), ('G', 'C', 'E'), ('G', 'C', 'F'), ('H', 'A', 'D'), ('H', 'A', 'E'), ('H', 'A', 'F'), ('H', 'B', 'D'), ('H', 'B', 'E'), ('H', 'B', 'F'), ('H', 'C', 'D'), ('H', 'C', 'E'), ('H', 'C', 'F'), ('I', 'A', 'D'), ('I', 'A', 'E'), ('I', 'A', 'F'), ('I', 'B', 'D'), ('I', 'B', 'E'), ('I', 'B', 'F'), ('I', 'C', 'D'), ('I', 'C', 'E'), ('I', 'C', 'F')]
Run Code Online (Sandbox Code Playgroud)
这会给你一堆元组,但你可以''.join
轻松地完成它们.
>>> list(''.join(p) for p in itertools.product('GHI','ABC','DEF'))
['GAD', 'GAE', 'GAF', 'GBD', 'GBE', 'GBF', 'GCD', 'GCE', 'GCF', 'HAD', 'HAE', 'HAF', 'HBD', 'HBE', 'HBF', 'HCD', 'HCE', 'HCF', 'IAD', 'IAE', 'IAF', 'IBD', 'IBE', 'IBF', 'ICD', 'ICE', 'ICF']
Run Code Online (Sandbox Code Playgroud)
当然,这不是递归的,如果你有其他约束力,也不会帮助你(也许教授?).我留下这个答案来证明python标准库有多强大,并且表明递归确实不是解决这类问题的最佳工具(至少在python中不是这样).