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

时间:2014-05-18 05:45:44

标签: java algorithm permutation

给定一个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]

2 个答案:

答案 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));