[問題] 排列組合只取一半

作者: 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