2017-02-22 23 views
-1

任何想法來做出組合的最佳代碼:如何列出組合可能性golang

與此:

letters := []string{"a", "b", "c", "d"} 

有:a ab ac ad abc abd b bc bcd等等

問候和感謝

+0

即圖案不是正則的。這是完整的輸出。 'a ab ac ad abc abd b bc bcd,c,cd' – atilkan

+0

參見Knuth,TAOCP§7.2 – Volker

回答

2

您正在尋找Powerset:

One a接近角是:

開始了slice一個空元素,讓我們把它的結果是:

[[]]

保持先前片,並創建一個新的切片與第一要素a你的數據結構加入到你到你原始片中的每一個元素。

[[]] < --old; [[a]] < --new

合併它們

[[], [a]]

做同樣的事情第二個元素b

[[], [a]] < --old; [[b], [ab]] < --new

=>[[], [a], [b], [ab]]

c爲:

[[], [a], [b], [ab]] < --old; [[c], [ac], [bc], [abc]] < --new

=>[[], [a], [b], [ab], [c], [ac], [bc], [abc]]

等..

+0

爲了補充這個答案,這裏給出了一個很好的鏈接,它給出瞭如何操作切片的例子https://github.com/golang /去/維基/ SliceTricks – reticentroot