Python random穷举法leetcode题库:17. 电话号码的字母组合,别样开辟思路,大佬会不会喷咱^_^

Calandra ·
更新时间:2024-09-20
· 553 次阅读

Python random穷举法leetcode题库:17. 电话号码的字母组合,别样开辟思路,大佬会不会喷咱 ^ _ ^

见下图:先说下leetcode17题:

电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 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秒

欢迎大家交流给出意见。


作者:Jan_Python测开之路



电话 leetcode random 字母 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号