在Scala中创建具有有限范围的列表的所有排列

时间:2016-07-16 01:50:22

标签: list scala permutation seq

我正在尝试创建一系列n元素列表,其中包含给定范围的所有排列。想要参数化元素的数量和范围。例如:

长度:4,范围:[0,3]

Seq(List(0, 0, 0, 0), List(0, 0, 0, 1), ..., List(3, 3, 3, 3), ..., List(1, 0, 0, 0))

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

这会让你到那儿。

List.fill(4)(0 to 3).flatten.combinations(4).flatMap(_.permutations)

它会返回Iterator,可以投放到SeqListVector等等。

您需要 n 该范围的副本,以便combinations()允许 n 重复该范围内的每个数字。

<强>解释

combinations是关于忽略元素的顺序,因此(0,1)被认为与(1,0)相同,并且只会呈现其中一个。你还必须告诉它子组的大小。

permutations是关于重新排序给定元素的,所以(2,2)本身只有一个排列,而(0,0,1)有3:(0,0,1)(0, 1,0)(1,0,0)

combinations创建元素的初始分组后,每个元素都会被送到permutations以获得所有可能的重新排序。