我试图获取一个数字数组的所有可能排列并将其存储在ArrayList中,但总是将arraylist的所有元素作为默认排列{1,4,9,11}获得相同的排列,请帮忙吗?

public static void main (String[] args) throws java.lang.Exception
{
    int [] my_numbers = {1,4,9,11};
    ArrayList<int []> permutation_results = new ArrayList<int []>();

    arrayPermutations(permutation_results,my_numbers,0);
}

public static void arrayPermutations(ArrayList<int []> result ,int[]
numbers, int index){
    if(index >= numbers.length - 1){

        result.add(numbers);

        return;
    }

    for(int i = index; i < numbers.length; i++){

        int t = numbers[index];
        numbers[index] = numbers[i];
        numbers[i] = t;

        arrayPermutations(result, numbers, index+1);

        t = numbers[index];
        numbers[index] = numbers[i];
        numbers[i] = t;
    }
}

最佳答案

您需要将数组的副本传递给递归调用:

arrayPermutations(result, numbers.clone(), index + 1);


否则,所有调用都会修改相同的int[]实例,
因此,同一实例会多次添加到结果列表中。

10-07 18:48
查看更多