列表的所有组合,其中每个元素可以具有很少的值

时间:2013-05-23 18:33:12

标签: c# list recursion

我需要帮助的问题很简单: 你有长度x的列表。 然后你有长度为y的数组。 我需要生成所有可能的长度为x的列表,这些元素来自数组。

我认为递归是解决方案,但不知道如何创建...

例如:

列表长度为5。

数组长度为3 - > [0,1,2]

所以生成的列表应该是:

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 1]
[0, 0, 0, 0, 2]
[0, 0, 0, 1, 0]
[0, 0, 0, 1, 1]
[0, 0, 0, 1, 2]
[0, 0, 0, 2, 0]
[0, 0, 0, 2, 1]
[0, 0, 0, 2, 2]
.
.
.
[2, 2, 2, 2, 1]
[2, 2, 2, 2, 2]

数组中的元素数量总是少于或等于列表中的元素。所以它总是y< = x

1 个答案:

答案 0 :(得分:0)

您可以按照建议使用递归:

public static IEnumerable<T[]> GetLists<T>(T[] elements, int length)
{
    if(length == 1) foreach(var t in elements)
        yield return new[] { t };
    else foreach(var t in elements) foreach(var list in GetLists(elements, length - 1))
        yield return new[] { t }.Concat(list).ToArray();
}

这不仅适用于数字,而且是通用的,因此您可以使用任何类型。