我遇到了尝试从集合[1..N]生成K个元素的所有变体的问题。我也有一个想法,我可以使用k个嵌套循环来做到这一点,并尝试递归但不成功。
我有这个功能:
public static void PrintVariation(int n, int k, int[] array)
{
//when k = 2
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
Console.WriteLine("{0}, {1}", array[i], array[j]);
}
}
}
但是当k
具有随机值时,我想要做什么?
答案 0 :(得分:0)
这是我的提示:我认为你使用递归是在正确的轨道上。
private List<Element[]> getVariations(int k, Element[] elements)
{
// ... ^_^
// use getVariations with less elements in here
}
答案 1 :(得分:0)
我不确定我是否会关注你,但我认为你应该这样做:
答案 2 :(得分:-1)
public static List<List<T>> GetVariations<T>(int k, List<T> elements)
{
List<List<T>> result = new List<List<T>>();
if (k == 1)
{
result.AddRange(elements.Select(element => new List<T>() { element }));
}
else
{
foreach (T element in elements)
{
List<T> subelements = elements.Where(e => !e.Equals(element)).ToList();
List<List<T>> subvariations = GetVariations(k - 1, subelements);
foreach (List<T> subvariation in subvariations)
{
subvariation.Add(element);
result.Add(subvariation);
}
}
}
return result;
}