2017-03-29 12 views
-3

たとえば、配列a = {1、2、6、10}を持つ場合、これらの4つの数値のすべての組み合わせを出力する必要があります。合計の組み合わせ。 5つの整数の配列は、合計5つです!組み合わせ。 (以前のバージョンの異なるパラメータの私の数は同じまましなければならないので、私はで3つ以上paramrtersを入れさせていない。どのように再帰を使用してn個の整数を持つ配列のすべての可能な順序を出力できますか?

配列A = {1、2、6、10}

{1、 2、10、6}

{1、6、2、10}

{1、6、10、2}

{10、6、2、1}

私は再帰、どのように任意のアイデアを使用してこのプロセスを解決しようとしていますか?これは私の今のコードです。何が起こっているのか分かっている人は誰でも私を助けてくれますか?

static void permutations (int a[], int n, int p){ 
    if (p==n-1) 
     return ; 
    for (int i=p; i<n; i++){ 
     int b[]=new int [n]; 
     b[p]=a[i]; 
     for (int j=0; j<i; j++) 
      b[j]=a[j]; 
      for (int k =i+1; k<n; k++) 
       b[k]=a[k];  
     System.out.println(Arrays.toString(b)); 
     return permutations(b, n, p+1); 
    }   
} 
+0

番号が重複する可能性があり、どのようにハンドリングする必要がありますか? – Mikenno

+0

これにはインターネット上の例とStack Overflowに関する例があります。最初に検索してから投稿してください。 – Prune

+0

[再帰 - Javaで繰り返しのない配列での組み合わせ]の可能な複製(http://stackoverflow.com/questions/22084420/recursion-combination-with-in-array-with-no-repetition-in-java) – Prune

答えて

0

代数のPermutationsの概念を使用して問題を解決する最良の方法は、すべての可能な組み合わせを得るのに非常に便利です。

あなたはこの問題を解決するための可能性に関する知識も持っている必要があります:{2, 1, 6, 10},{6, 2, 1, 10},{10, 2, 6, 1}:この中で

{1, 2, 6, 10}要素1K-順列3

であり、この順列であり設定しました。 {1, 6, 2, 10},{1, 10, 6, 2}

も素子2K-順列2

2順列であるています。 {1, 2, 10, 6}

要素6K-順列1

6順列であるています。

最後に、セット内のすべての要素の可能な合計のパーミュテーション:3 * 2 * 1 = 6

すべての可能な順列を印刷する単純なアルゴリズム:

int[] num = {1,2,6,10}; 
    int[] a = num.clone(); 
    ArrayList<String> combs = new ArrayList<String>(); 
    int temp; 
    for(int i=0; i < num.length-1; i++){ 
     for(int j=i+1; j < num.length; j++){ 
      temp = a[i]; 
      a[i] = a[j]; 
      a[j] = temp; 
      String obj = Arrays.toString(a); 
      if(!combs.contains(obj)){ 
       combs.add(obj); 
      } 
      a = num.clone(); 
     } 
    } 
    System.out.println("All possible order Combinations:"); 
    for(String obj : combs){ 
     System.out.println(obj); 
    } 

出力:

All possible order Combinations: 
[2, 1, 6, 10] 
[6, 2, 1, 10] 
[10, 2, 6, 1] 
[1, 6, 2, 10] 
[1, 10, 6, 2] 
[1, 2, 10, 6] 

が、これは役立つだろう願っています。

関連する問題