Java – ArrayList元素的排列(整数) – 无法使其正常工作

我一直在四处寻找解决我的问题。 我解决了很多问题,但是这个问题仍然困扰着我:S很长一段时间我没有接触过Java编程(一般的编程)所以要在那里理解! ;)

我的目标是从整数数组中获得所有组合。 当我使用以下代码,应用于整数{1,2,3,4}的测试数组时,我希望:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
2 1 3 4
2 1 4 3
(……)
但这就是我得到的
1 2 3 4
1 2 3 4 4 3
1 2 3 4 4 3 3 2 4

有人有线索,建议甚至解决方案吗? 提前致谢!

public class Calculation{ (...) public void Permute(ArrayList soFar,ArrayList rest){ if(rest.isEmpty()) this.fillMatrice(convertIntegers(soFar)); // there it goes in a previously created arrow of int else{ for(int k=0;k<rest.size();k++){ ArrayList next=new ArrayList(); next=soFar; next.add(rest.get(k)); ArrayList remaining=new ArrayList(); List sublist = rest.subList(0, k); for(int a=0;a<sublist.size();a++) remaining.add(sublist.get(a)); sublist = rest.subList(k+1,rest.size()); for(int a=0;a<sublist.size();a++) remaining.add(sublist.get(a)); Permute(next,remaining); } } } public static ArrayList convertArray(int[] integers){ ArrayList convArray=new ArrayList(); for(int i=0;i<integers.length;i++) convArray.add(integers[i]); return convArray; } public static int[] convertIntegers(List integers){ int[] ret = new int[integers.size()]; for(int i=0;i<ret.length;i++) ret[i]=integers.get(i).intValue(); return ret; } public Calculation() { (...) ArrayList soFar=new ArrayList(); int[] test={1,2,3,4}; Permute(soFar,convertArray(test)); } 

您可以尝试使用Recursion来解决此问题:

 public static void printPermutations(int[] n, int[] Nr, int idx) { if (idx == n.length) { //stop condition for the recursion [base clause] System.out.println(Arrays.toString(n)); return; } for (int i = 0; i <= Nr[idx]; i++) { n[idx] = i; printPermutations(n, Nr, idx+1); //recursive invokation, for next elements } } 

可以从以下链接获得更多信息: 组合:生成所有“状态” - 数组组合

您也可以在这里复制相同的逻辑。

试试这个,它似乎工作,它使用递归。

 public class Permute { public static List> permute(Integer...myInts){ if(myInts.length==1){ List arrayList = new ArrayList(); arrayList.add(myInts[0]); List > listOfList = new ArrayList>(); listOfList.add(arrayList); return listOfList; } Set setOf = new HashSet(Arrays.asList(myInts)); List> listOfLists = new ArrayList>(); for(Integer i: myInts){ ArrayList arrayList = new ArrayList(); arrayList.add(i); Set setOfCopied = new HashSet(); setOfCopied.addAll(setOf); setOfCopied.remove(i); Integer[] isttt = new Integer[setOfCopied.size()]; setOfCopied.toArray(isttt); List> permute = permute(isttt); Iterator> iterator = permute.iterator(); while (iterator.hasNext()) { List list = iterator.next(); list.add(i); listOfLists.add(list); } } return listOfLists; } public static void main(String[] args) { List> permute = permute(1,2,3,4); System.out.println(permute); } } 

如果您不喜欢List>,您可以使用list.antil.Collections和java.util.Arrays中的list和static方法中的方法轻松地从数组更改为list。