質問
私は以下のような配列
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
.......
.......
.......
解決
ここで使用する かなり柔軟なC#実装ですイテレータます。
他のヒント
さて、あなたはすべて中継されない組み合わせを探している、それはNがあることを意味しますことを考えます!このような組み合わせ...(そう、あなたのケースでは、N!= 4!= 24のこのような組み合わせ)。
私はこれを掲示するの真ん中にいるよと、dommerは良い実装を指摘しています。
ちょうどそれがNの値が大きいために本当に遅い取得する予定ですだことを警告する。(N!順列があるので)。
それは任意の光を当てるかどうかを確認するために、世界の2つの可能な状態を考えてみます。
1)私の配列にはdupesはありません(すなわち。配列の各番号)がユニークです。この場合、どのように多くの可能なの順列のがありますか?
2)配列内の1つのデュープがあります。だから、ちょうど
を複製しているどのように多くのあなたがパート1で計算順列の数、のうーん、単純化のための3つの要素の配列を取ることができます。
1,3,5はどのように多くの順列を持っていますか?
1,3,5
1,5,3
3,1,5
3,5,1
5,1,3
5,3,1
だから、6つの順列
我々は1,5,5を言うためにリストを変更する場合は、さてどうなるでしょうか。
私たちが得る
1,5,5
5,1,5
5,5,1
あなたに私の質問は次のようになり、どのように階乗を経由して、これを表現することができますか?
おそらく、4つの要素の配列ですべての順列を書き出してみてくださいと電球が消えるかどうかを確認?