给定一个int [] {2,8,10}。我需要在列表中返回此数组的所有排列。但是当我尝试将它们添加到列表中时,它会一遍又一遍地返回{2,8,10}。
此外,如果我打印排列,它会给我正确的结果。我已经在我的代码中评论了下面的system.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]
答案 0 :(得分:0)
在for
方法的generatePermutations1
循环中,您为每个生成的排列覆盖相同的数组。您应该为每个这样的排列创建一个新的:
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);
}
答案 1 :(得分:0)
ALL_PERMUTATIONS.add(arrayOfIntegers);
//System.out.println(Arrays.toString(arrayOfIntegers));
当您将数组添加到列表时,它是正确的,但您添加到列表中的所有内容都是相同的数组,因此添加后,您已将数组修改为原始状态。 你可以尝试修改
ALL_PERMUTATIONS.add(arrayOfIntegers);
到
ALL_PERMUTATIONS.add(Arrays.copyOf(arrayOfIntegers, arrayOfIntegers.length));