组合问题

时间:2009-05-28 14:08:55

标签: c# permutation

我有一个如下所示的数组

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
.......
.......
.......

3 个答案:

答案 0 :(得分:4)

这是使用迭代器的pretty flexible C# implementation

答案 1 :(得分:0)

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

由于我正在发布这篇文章,dommer指出了一个很好的实现。

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

答案 2 :(得分: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

我的问题是,你怎么能通过阶乘来表达这个?

或许尝试使用四元素阵列写出所有排列并查看灯泡是否熄灭?