手机的九宫格图案解锁总共能绘出多少种图案?修改
需要满足的要求有:
至少经过四个点;
不能重复经过同一个点;
路径上的中间点不能跳过(如从1到3一定会经过2);
如果中间的点是之前已经用过的,那么这个点就可以被跳过(如213,因为2已经被用过,1就可以越过2与3连接,132是不允许的)。修改
举报21 条评论 分享 • 邀请回答
按投票排序
按时间排序
18 个回答
linkwun,知乎手机客户端查看评论为何如此之难?
江蕊鲤、Br TT、越颖 等人赞同
from itertools import *
impossible = {'13': '2',
'46': '5',
'79': '8',
'17': '4',
'28': '5',
'39': '6',
'19': '5',
'37': '5',
'31': '2',
'64': '5',
'97': '8',
'71': '4',
'82': '5',
'93': '6',
'91': '5',
'73': '5'}
def counts():
iterlst = chain(*(permutations('123456789', i) for i in range(4, 10)))
count = 0
for i in iterlst:
stri = ''.join(i)
for k, v in impossible.items():
if k in stri and v not in stri[:stri.find(k)]:
break
else:
count += 1
return count
print(counts())
我用python写了段代码,先计算出所有大于四个数字的所有排列组合,然后从中剃除穿过中间那个数字的组合,剩下的既为符合要求的代码。
例如13组合是不可能存在的,因为它会穿过2,19组合也不可能存在,因为它会穿过5,总共有16个这样的组合。
但是假如中间这个数字已经用过了,是可以穿过的,比如213,2已经用过了,1是可以穿过2与3连接的。
如此筛选以后,就得到正确答案389112了。
手机九宫格密码总数
最新推荐文章于 2021-03-26 07:59:21 发布