我在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个元素集创建3个元素集c = [{1,2,3},{1,2,4},{1,2,5},{2,3 ,4},{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 ...如何修改上面的循环系统来实现呢?
答案 0 :(得分:0)
s1
,s2
。b
,只需使用(a, a)
。c
,只需使用(a, b)
或(b,a)
调用该方法。您只需添加一些逻辑即可从集合中的项目中删除}
或{
。或者,不要将它们放在一起,仅用于打印结果。
答案 1 :(得分: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()));
}