2016-12-05 15 views
0

このアルゴリズムを解くのにはかなり近いです。これはもう一つの長大なアルゴリズムの一部ですが、私はこれを使ってArrayList内の整数のすべての順序付けられた組み合わせを見つけました。Javaで整数のArrayListを使用してコンビネーションを再帰的に書く

私は整数{0,1,2}のArrayListを持っています。私は、これを解決するために、メンバーメソッドpermute()を使用して、再帰を効率的に使用したいと考えています。私は、元のArrayList {0,1,2}を持っていて、ArrayListヘルパーを使って1つずつArrayList preArrを使用して、preArrがアイテムを埋め込むまで、次にpreArrとヘルパーの両方をクリアして新しい組み合わせで補充しようとします。

public class ArrayPermutation { 

    ArrayList<Integer> arr = new ArrayList<>(); 

    public ArrayPermutation(int N) { 
     for (int i = 0; i < N; i++) { 
      arr.add(i); 
      //System.out.println("Arr at index " + i + " ===> " + arr[i]); 
     } 

    } 

    public static void main(String[] args) { 
     // Test an integer array and pring all posible combinations 
     int N = 3; 
     ArrayPermutation a = new ArrayPermutation(N); 
     a.solver(N); 
    } 

    public void solver(int N) { 
     ArrayList<Integer> pArr = new ArrayList<>(); 
     ArrayList<Integer> preArr = new ArrayList<>(); 

     for (int i = 0; i < N; i++) { 
      pArr.add(i); 
     } 
     permute(preArr, pArr, N); 
    } 

    public void permute(ArrayList<Integer> preArr, ArrayList<Integer> pArr, int N) { 

     int n = pArr.size(); 
     ArrayList<Integer> helper = new ArrayList<>(); 

     if(n == 0){ 
      for (int i = 0; i < preArr.size(); i++) { 
       System.out.print(preArr.get(i) + " "); 
      } 
      System.out.println(""); 
     } else { 
      for (int i = 0; i < n; i++) { 
       for(int j = 0; j < n; j++){ 
        if(j == i) 
        { 
         preArr.add(pArr.get(j)); 
        } 
        else { 
         helper.add(pArr.get(j)); 
        } 

       } 
       permute(preArr, helper, N); 
       preArr.clear(); 
       helper.clear(); 
      } 

     } 

    } 

} 

ここからは次のようになります。

Expected Output 
0 1 2 
0 2 1 
1 0 2 
1 2 0 
2 0 1 
2 1 0 

Actual Output 
0 1 2 
2 1 
1 0 2 
2 0 
2 0 1 
1 0 

だから、私は毎秒リストから非常に最初の整数をしないのです見ることができるように。私は私が近づいていることを知っている、私はちょうどこの1つの特定の問題を考え出すいくつかの問題があります。私はすでに他のソースを使っていくつかの助けを見てきましたが、私の具体例を理解するのはちょっと難しいです。私はどんな助けにも感謝しています!

答えて

0

あなたはその一連の並べ替えが完了する前にpreArrをクリアしています。代わりに最後の要素を削除することをお勧めします。

+0

うわー!そこでpreArr.clear()をpreArr.remove(preArr.size() - 1)に置き換えました。私は少しばかげていると感じますが、今、安心しました。それを指摘してくれてありがとうございました。 –

関連する問題