[问题] 排列组合只取一半

楼主: ptt0720 (湿湿)   2017-08-21 22:09:10
最近写题目写到一题
http://i.imgur.com/vYeB7nL.png
要先把字串依照a b c顺序排列好
之后进行排列组合
然后印出最中间的那一笔
我用的方法是itertools的module
但是在server进行运算的时候 系统说我超过时间了
限制时间是12000ms
我的code
http://i.imgur.com/YvcrD7b.png
我在想应该是产生全部排列组合太没有效率了
但是又不知道如何生成一半组合就好
作者: bibo9901 (function(){})()   2017-08-21 22:14:00
他要的是 第N!/2 个排,其实是可以直接算出来的"abc"的所有排列里a开头、b开头、c开头的各有2个所以perm("abc", 3) = "b" + perm("ac", 1)然后递回就解了ps. perm(s, k) 代表 s的第k个排列
楼主: ptt0720 (湿湿)   2017-08-21 22:58:00
可以用abcd举例吗 不太懂@@我印list(perm(string,middle))是空的perm(m,n) n好像是取样数 不是第几种
作者: bibo9901 (function(){})()   2017-08-21 23:46:00
那只是我用的记号而已
楼主: ptt0720 (湿湿)   2017-08-22 00:02:00
有人有不同的解释方式吗 麻烦各位了
作者: aegius1r (SC)   2017-08-22 01:06:00
用next+itertools.islice应该可以做?
作者: uranusjr (←這人是超級笨蛋)   2017-08-22 02:44:00
这根本不用产生吧, 中间那个不就是从中间往左右排的结果
作者: k1dave6412 (朔月星痕)   2017-08-23 02:09:00
题目是在哪里的啊,好奇

Links booklink

Contact Us: admin [ a t ] ucptt.com