获取数组数组的所有可能排列的ArrayList

时间:2017-11-04 07:24:12

标签: java arrays arraylist permutation

我正在尝试获取数组数组的所有可能排列并将其存储在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;
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

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