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 元素集创建 4 元素集 d = [{1,2,3,4}, {1,2,3,5},{1,2,4,5} ,{2,3,4,5}]

再次,我想创建 5 元素集 lilkewise ......我该如何修改上述循环系统来实现它?

4

2 回答 2

0
  1. 把它放在一个需要两组的方法中s1s2.
  2. 要生成b,只需使用 调用该方法(a, a)
  3. 要生成c,只需使用(a, b)或调用该方法(b,a)
  4. 随意重复。

您只需添加一些逻辑即可从集合中的项目中删除}or {。或者,根本不要放置它们,仅将它们用于打印结果。

于 2013-06-15T11:14:05.410 回答
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 回答