我需要帮助的问题很简单: 你有长度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
答案 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();
}
这不仅适用于数字,而且是通用的,因此您可以使用任何类型。