-2

我需要帮助的问题很简单:你有长度为 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

4

1 回答 1

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();
}

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

于 2013-05-23T18:41:26.867 回答