给定一个int[]{2,8,10}。我需要以列表的形式返回这个数组的所有排列。但是当我尝试将它们添加到列表中时,它会一次又一次地返回{2,8,10}。
Also如果我打印排列,它会给我正确的结果。我已经对系统进行了评论。在我的代码下面的Out语句。添加列表(ALL_PERMUTATIONS)并返回它似乎不起作用。谁能指出哪里出错了?
public class Permutation {
private static final List<int[]> ALL_PERMUTATIONS = new ArrayList<int[]>();
public static void main(String args[]) {
int[] arrayOfIntegers = {2, 8, 10};
int start = 0;
int length = arrayOfIntegers.length - 1;
Permutation permutation = new Permutation();
List<int[]> allPermutations = permutation.generatePermutations1(arrayOfIntegers,start,length);
for (int[] permutation: allPermutations)
{
System.out.println(Arrays.toString(permutation));
}
part2All.generatePermutations(arrayOfBreaks, start, length);
}
private List<int[]> generatePermutations1(int[] arrayOfIntegers, int start, int length) {
if (start == length)
{
ALL_PERMUTATIONS.add(arrayOfIntegers);
//System.out.println(Arrays.toString(arrayOfIntegers));
} else {
for (int i = start; i <= length; i++) {
int tempStorage = arrayOfIntegers[start];
arrayOfIntegers[start] = arrayOfIntegers[i];
arrayOfIntegers[i] = tempStorage;
generatePermutations1(arrayOfIntegers, start + 1, length);
tempStorage = arrayOfIntegers[start];
arrayOfIntegers[start] = arrayOfIntegers[i];
arrayOfIntegers[i] = tempStorage;
}
}
return (ALL_PERMUTATIONS);
}
实际结果:[2,8,10]
[2,8,10]
[2,8,10]
[2,8,10]
[2,8,10]
[2,8,10]
ALL_PERMUTATIONS.add(arrayOfIntegers);
//System.out.println(Arrays.toString(arrayOfIntegers));
当您将数组添加到列表中时,它是正确的,但是您添加到列表中的所有数组都是相同的数组,因此添加后,您必须将数组修改为原始状态。你可以试着修改
ALL_PERMUTATIONS.add(arrayOfIntegers);
ALL_PERMUTATIONS.add(Arrays.copyOf(arrayOfIntegers, arrayOfIntegers.length));
在generatePermutations1
方法的for
循环中,您为生成的每个排列重写相同的数组。您应该为每个这样的排列创建一个新目录:
private List<int[]> generatePermutations1(int[] arrayOfIntegers, int start, int length) {
if (start == length)
{
ALL_PERMUTATIONS.add(arrayOfIntegers);
//System.out.println(Arrays.toString(arrayOfIntegers));
} else {
for (int i = start; i <= length; i++) {
// New array generated here:
int[] resultArray = Arrays.copyOf(arrayOfIntegers, arrayOfIntegers.length];
int tempStorage = resultArray[start];
resultArray[start] = resultArray[i];
resultArray[i] = tempStorage;
generatePermutations1(resultArray, start + 1, length);
tempStorage = resultArray[start];
resultArray[start] = resultArray[i];
resultArray[i] = tempStorage;
}
}
return (ALL_PERMUTATIONS);
}