返回列表 <int[]> 包含给定数组的所有排列



给定一个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);
}

最新更新