数组的不同组合(C#)

我们如何使用c#代码找出数组元素的不同组合。有没有内置的库函数呢?

例如:假设一个数组具有元素{2,3,4,5,6,7},则可能的组合为2,3,4,5,6,7,2 3,2 3 4,2 3 4 5等

所以基本上我需要一个函数,该函数根据其输入给出不同的组合,例如:comb(array,2)给出输出2 3,1 2,3

4和comb(array,3)给出输出1 2 3,2 3 4,3 4 5依此类推

例如:array = {1,2,3}和length = 2的有效组合是1 2,1 3,2 3 .....

回答:

static void Main()

{

var cnk = comb(new [] {1,2,3},2);

foreach ( var c in cnk)

{

}

}

public static IEnumerable<int[]> comb(int[] a, int k)

{

if (a == null || a.Length == 0 || k < 1 || k > a.Length)

yield break;

int n = a.Length;

// 1

if ( k == 1)

for ( int i = 0; i < n; i++)

{

yield return new int[] {a[i]};

}

else

{

// k

for ( int i = 0; i < n - k + 1; i++)

{

var res = new int[k];

for (int t = i, c = 0; t < i + k - 1; t++, c++)

res[c] = a[t];

for (int j = i + k - 1; j < n; j++)

{

res[k-1] = a[j];

yield return res;

}

}

}

}

您应该从这里获取算法, 我的答案不能解决您的问题。算法返回n中k个元素的所有组合

以上是 数组的不同组合(C#) 的全部内容, 来源链接: utcz.com/qa/414088.html

回到顶部