繁体   English   中英

递归方法中int []的ArrayList

[英]ArrayList of int[] in a recursive method

我有一个学校项目,必须使用一种递归方法来计算一些数字之间的所有切换可能性。 IE:[1,2] => 1,2和2,1。

所以我使用了这种方法,当我只在控制台上打印解决方案时,它似乎可以正常工作,但是当我想将选项卡存储在ArrayList中时(我以后需要使用它们),它将总是添加相同的顺序。 在我的例子中,它将增加1,2和1,2,而不是1,2和2,1。

这是我的代码:

public  static void permute(int start, int[] input, ArrayList <int[]> al) { 
    //This method is recursive, it will open multiple instances of the input tab by calling itself and modify them, then stock tab in ArrayList when the operations are done for this tab.
    //ArrayList must be empty.

    //Printing tab if iterations for that specific tab are done
    if (start == input.length) {
        al.add(input);
        ////////////////////////////////
        // For printing tabs in console.
        // for(int x: input){
        // System.out.print(x);
        // }
        // System.out.println("");
        ////////////////////////////////
    //End the specific tab loop when it's printed 

    return;
    }
    for (int i = start; i < input.length; i++) {
        // Changing numbers
        int temp = input[i];
        input[i] = input[start];
        input[start] = temp;

        //////////////////////////////////////////////////
        // Tests to see algorithm steps
        //
        // System.out.print("temp : " + temp + " ... ");
        // System.out.print("i : "+i + " ... ");
        // System.out.print("start : " + start);
        // System.out.println("");
        // System.out.print("---");
        // for(int x: input){
        //  System.out.print(x);
        // }
        // System.out.println("");
        //////////////////////////////////////////////////

        //Changing numbers
        permute(start + 1, input, al);

       // Changing numbers
        int temp2 = input[i];
        input[i] = input[start];
        input[start] = temp2;

}

}

我使用start = 0,input = {1,2,3},并且在方法开始之前ArrayList为空。

希望能对您有所帮助,谢谢!

问题是您要在ArrayList中添加对数组的引用,然后在您的算法中不断更改引用。

到最后,您将拥有同一阵列的perm(N)个副本。

您要做的就是将数组的深层副本添加到ArrayList中,如下所示:

al.add(Arrays.copyOf(input, input.length));

代替

al.add(input);

打印结果ArrayList将产生以下输出:

[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM