如何在golang中列出组合可能性

时间:2017-02-22 23:11:49

标签: go

任何想法为组合制作最佳代码:

用这个:

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

要:a ab ac ad abc abd b bc bcd等......

问候和感谢

1 个答案:

答案 0 :(得分:2)

您正在寻找Powerset:

一种方法是:

从一个带有一个空元素的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]]

依旧......