C# 从一组n中找出K元素的所有变化
我一直在试图从集合[1..N]中生成K元素的所有变体。我也有一个想法,我可以用k个嵌套循环来实现这一点,并尝试递归实现,但没有成功C# 从一组n中找出K元素的所有变化,c#,algorithm,variation,C#,Algorithm,Variation,我一直在试图从集合[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++) {
我有这个功能:
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]);
}
}
}
公共静态void PrintVariation(int n,int k,int[]数组)
{
//当k=2时
对于(int i=0;i
但是当
k
有一个随机值时,我应该怎么做呢?这里是我的提示:我认为使用递归是正确的
private List<Element[]> getVariations(int k, Element[] elements)
{
// ... ^_^
// use getVariations with less elements in here
}
private List getVariations(int k,元素[]元素)
{
// ... ^_^
//在此处使用元素较少的getVariations
}
这里是我的提示:我认为使用递归是正确的
private List<Element[]> getVariations(int k, Element[] elements)
{
// ... ^_^
// use getVariations with less elements in here
}
private List getVariations(int k,元素[]元素)
{
// ... ^_^
//在此处使用元素较少的getVariations
}
我不确定我是否明白你的意思,但我认为你应该这样做:
我不确定我是否明白你的意思,但我认为你应该这样做:
publicstaticlist-GetVariations(intk,列表元素)
{
列表结果=新列表();
如果(k==1)
{
AddRange(elements.Select(element=>newlist(){element}));
}
其他的
{
foreach(元素中的T元素)
{
列出子元素=元素。其中(e=>!e.Equals(element)).ToList();
列出子变量=获取变量(k-1,子元素);
foreach(列出子变体中的子变体)
{
子变量。添加(元素);
结果:添加(子变量);
}
}
}
返回结果;
}
公共静态列表GetVariations(int k,列表元素)
{
列表结果=新列表();
如果(k==1)
{
AddRange(elements.Select(element=>newlist(){element}));
}
其他的
{
foreach(元素中的T元素)
{
列出子元素=元素。其中(e=>!e.Equals(element)).ToList();
列出子变量=获取变量(k-1,子元素);
foreach(列出子变体中的子变体)
{
子变量。添加(元素);
结果:添加(子变量);
}
}
}
返回结果;
}
请发布您当前的代码,并解释您在使用代码时遇到的困难。请将您的代码放在上面,以便我们更好地理解问题。首先,让我们看看你到目前为止做了些什么。中的问题相同。你可以在这里阅读一些有趣的想法:请发布你当前的代码,并解释你在其中遇到的困难。你能把你的代码放出来,以便我们更好地理解这个问题吗,让我们看看你到目前为止都做了些什么。中也有同样的问题。你可以在这里读到一些有趣的想法:嗯,一个包含大量[]
的提示,而我们有这些方便的
。这只是一个暗示^^嗯,一个包含大量[]
的提示,而我们有这些方便的
就是这样。这只是一个暗示^^我有这个函数:publicstaticvoidprintvariation(intn,intk,int[]数组){//when k=2 for(inti=0;i