Python random穷举法leetcode题库:17. 电话号码的字母组合,别样开辟思路,大佬会不会喷咱 ^ _ ^
见下图:先说下leetcode17题:
电话号码的字母组合给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
下面直接上代码吧:写的比较粗糙,我直接随便写了个例子号码:s = ‘347892732’,算了下有46656个组合,开干。。。
import random
import time
dict = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
s = '347892732'
k = []
start_time = time.time()
for i in s:
k.append(dict[i]) #总共组合数 46656个
print(k)
count=0
l = []
while count<700000:
s = []
for i in k:
t = random.choice(i)
s.append(t)
l.append(s)
count += 1
# print(l)
print(len(l))
m = []
for i in l:
m1 =''.join(i)
# print(m1)
m.append(m1)
# print(m)
print(len(m))
print(set(m))
print(len(set(m)))
count_time= time.time()-start_time
print(count_time)
#想了蛮久,没有什么好的思路,算了下总共有4万多种组合,想到可以使用random choice来随机取所有可能的情况,使用random随机取值,然后将穷尽的所有种结果存入列表,然后列表转换为字符串,我设置的循环70万次,使用set去重(肯定有很多种重复),最后跑了十几次做验证都是穷举出所有的 46656个组合,大佬请赐教。
便于观察,以下是设置10次的运行结果(代码有注释print):
D:\Anaconda3\python.exe D:/software/pycharm_data/practice/Auto/exercise/exe3.py
[‘def’, ‘ghi’, ‘pqrs’, ‘tuv’, ‘wxyz’, ‘abc’, ‘pqrs’, ‘def’, ‘abc’]
[[‘e’, ‘g’, ‘q’, ‘u’, ‘x’, ‘a’, ‘r’, ‘d’, ‘a’], [‘f’, ‘i’, ‘r’, ‘v’, ‘w’, ‘c’, ‘p’, ‘e’, ‘a’], [‘d’, ‘i’, ‘r’, ‘v’, ‘x’, ‘c’, ‘q’, ‘e’, ‘b’], [‘f’, ‘g’, ‘s’, ‘v’, ‘y’, ‘c’, ‘s’, ‘f’, ‘a’], [‘e’, ‘h’, ‘s’, ‘t’, ‘x’, ‘b’, ‘s’, ‘d’, ‘b’], [‘e’, ‘h’, ‘r’, ‘v’, ‘x’, ‘c’, ‘r’, ‘e’, ‘b’], [‘e’, ‘i’, ‘r’, ‘u’, ‘x’, ‘c’, ‘r’, ‘e’, ‘a’], [‘e’, ‘g’, ‘s’, ‘v’, ‘x’, ‘b’, ‘q’, ‘f’, ‘c’], [‘f’, ‘g’, ‘r’, ‘t’, ‘y’, ‘b’, ‘r’, ‘d’, ‘b’], [‘e’, ‘h’, ‘p’, ‘t’, ‘w’, ‘b’, ‘p’, ‘e’, ‘c’]]
10
[‘egquxarda’, ‘firvwcpea’, ‘dirvxcqeb’, ‘fgsvycsfa’, ‘ehstxbsdb’, ‘ehrvxcreb’, ‘eiruxcrea’, ‘egsvxbqfc’, ‘fgrtybrdb’, ‘ehptwbpec’]
10
{‘ehptwbpec’, ‘dirvxcqeb’, ‘firvwcpea’, ‘egsvxbqfc’, ‘ehstxbsdb’, ‘fgsvycsfa’, ‘ehrvxcreb’, ‘egquxarda’, ‘fgrtybrdb’, ‘eiruxcrea’}
10
0.0
运行70万次,大约六秒5,最终结果:
D:\Anaconda3\python.exe D:/software/pycharm_data/practice/Auto/exercise/exe3.py
[‘def’, ‘ghi’, ‘pqrs’, ‘tuv’, ‘wxyz’, ‘abc’, ‘pqrs’, ‘def’, ‘abc’]
700000
700000
{‘firuzcqea’, ‘egpuzcqec’, ‘eiqvxaqda’, ‘dipvxaqdc’, ‘fhptwcpda’, ‘fgsuxcsfc’…(结果太多省略)
46656
6.5269999504089355 时间s秒
欢迎大家交流给出意见。