/// <summary>
/// 求数组中n个元素的组合
/// </summary>
public static List<T[]> GetCombination<T>(T[] t, int n)
{
if (t.Length < n)
{
return new List<T[]>(){t};
}
int[] temp = new int[n];
List<T[]> list = new List<T[]>();
GetCombination(ref list, t, t.Length, n, temp, n);
return list;
}
/// <summary>
/// 递归算法求数组的组合(私有成员)
/// </summary>
private static void GetCombination<T>(ref List<T[]> list, T[] source, int totalCount, int requiredCount, int[] indexList, int M)
{
for (int i = totalCount; i >= requiredCount; i--)
{
indexList[requiredCount - 1] = i - 1;
if (requiredCount > 1)
{
GetCombination(ref list, source, i - 1, requiredCount - 1, indexList, M);
}
else
{
if (list == null)
{
list = new List<T[]>();
}
T[] temp = new T[M];
for (int j = 0; j < indexList.Length; j++)
{
temp[j] = source[indexList[j]];
}
list.Add(temp);
}
}
}