0

我有一个像下面这样的数组

int[] array = new array[n];// n may be 2,3,4

N = 4 的示例

int[] array = new array[4];

array[0] = 2;
array[1] = 4;
array[2] = 6;
array[3] = 8;

我如何在不使用 linq 的情况下计算该数组的所有未重复组合?

2,4,6,8
2,4,8,6
2,8,6,4
2,6,4,6
8,6,4,2
2,4,6,8
..........
_ ………………
_

4

3 回答 3

4

这是一个使用迭代器的非常灵活的 C# 实现。

于 2009-05-28T14:19:26.373 回答
0

好吧,鉴于您正在寻找所有不重复的组合,这意味着将有 N 个!这样的组合......(所以,在你的情况下,N!= 4!= 24个这样的组合)。

当我正在发布这个时,dommer 指出了一个很好的实现。

请注意,对于较大的 N 值,它会变得非常慢(因为有 N! 排列)。

于 2009-05-28T14:21:35.807 回答
0

想想世界上两种可能的状态,看看这是否能说明问题。

1)我的数组中没有重复(即数组中的每个数字都是唯一的)。在这种情况下,有多少种可能的排列

2)阵列中有一个单一的重复。所以,在你在第一部分计算的排列数量中,有多少只是重复的

嗯,为简单起见,让我们采用一个三元素数组

1,3,5有多少种排列?

1,3,5

1,5,3

3,1,5

3,5,1

5,1,3

5,3,1

所以六个排列

现在如果我们将列表更改为 1,5,5 会发生什么?

我们得到

1,5,5

5,1,5

5,5,1

我对您的问题是,您如何通过阶乘来表达这一点?

也许尝试用一个四元素数组写出所有排列,看看灯泡是否熄灭?

于 2009-05-28T14:25:52.757 回答