0

JavaでArrayList a = [1,2,3,4,5]を宣言しました。以下のループを使用して、別の ArrayList b を作成しました。

for(int i = 0; i<a.size(); i++)
{
      for(int j=i+1; j<a.size();j++)
      {
              b.add("{" + a.get(i)+ "," + a.get(j) + "}");
      }
}

これで、ArrayList b には要素 [{1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2,5}, {3,4}、{3,5}、{4,5}]。System.out.println(b.get(0)) を使用してステートメントを出力すると、出力は {1,2} になります。

ここで、2 要素セット c = [{1,2,3},{1,2,4},{1,2,5},{2,3,4} から 3 要素セットを作成します。 ,{2,3,5},{3,4,5}]。

繰り返しますが、上記の 3 要素セットから d = [{1,2,3,4}, {1,2,3,5},{1,2,4,5} として 4 要素セットを作成したいと思います。 ,{2,3,4,5}]

繰り返しますが、同様に5要素セットを作成したいのですが...上記のループシステムを変更してそれを達成するにはどうすればよいですか?

4

2 に答える 2

0

数値の配列のすべての順列を作成するための再帰的な方法を作成しました。

public static void main(String ... args) {
    List<Integer> numbers= new ArrayList<>();
    numbers.add(1);
    numbers.add(2);
    numbers.add(3);
    numbers.add(4);
    numbers.add(5);

    for (int i=0; i<numbers.size(); i++) {
        dfs(numbers.get(i), numbers, new ArrayList<Integer>(), numbers.size(), 0);
    }
}

private static List<List<Integer>> resultOfResults= new ArrayList<>();

private static void dfs(int startNumber, List<Integer> numbers, List<Integer> result, int depth, int currentDepth) {
    result.add(startNumber);
    for (int i= 0; i < numbers.size(); i++) {
        if (!result.contains(numbers.get(i))) {
            dfs(numbers.get(i), numbers, new ArrayList<Integer>(result), depth, currentDepth + 1);
        }
    }
    if (currentDepth + 1 == depth) { 
        resultOfResults.add(result);
        return;
    }
}

次に、resultOfResults各配列に移動して印刷します。

for (List<Integer> result : resultOfResults) {
    System.out.println(Arrays.toString(result.toArray()));
}
于 2013-06-15T11:50:19.867 に答える
0
  1. s1それを 2 つのセットを取るメソッドに入れますs2
  2. を生成するbには、メソッドを で呼び出すだけ(a, a)です。
  3. を生成するには、またはcでメソッドを呼び出すだけです。(a, b)(b,a)
  4. 勝手に繰り返す。

セット内のアイテムから}またはを削除するロジックを追加するだけです。{または、それらをまったく配置せず、結果を印刷するためだけに使用します。

于 2013-06-15T11:14:05.410 に答える