java中未在全局ArrayList中添加值

java中未在全局ArrayList中添加值,java,algorithm,backtracking,Java,Algorithm,Backtracking,我正在interviewbit上解决问题,从逻辑上讲,我已经使用回溯解决了这个问题,但我无法在我在主函数外部定义的ArraList中添加值。我的代码如下所示: import java.util.Scanner; import java.util.ArrayList; import java.util.Collections; class main { public static ArrayList<ArrayList<Integer>> solution = ne

我正在interviewbit上解决问题,从逻辑上讲,我已经使用回溯解决了这个问题,但我无法在我在主函数外部定义的
ArraList
中添加值。我的代码如下所示:

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
class main {
    public static ArrayList<ArrayList<Integer>> solution = new ArrayList<ArrayList<Integer>>();

    public static ArrayList<ArrayList<Integer>> subsets(ArrayList<Integer> A) {
        if(A.size() == 0){
            return new ArrayList<ArrayList<Integer>>();
        }
        Collections.sort(A);

        ArrayList<Integer> subset = new ArrayList<Integer>();
        solution.add(subset);
        subsetsUtil(A, subset, 0);
        return solution;
    }

    public static void subsetsUtil(ArrayList<Integer> A, ArrayList<Integer> subset, int index) {
        for(int i=index; i<A.size(); i++) {
            //including the element
            subset.add(A.get(i));
            solution.add(subset);
            subsetsUtil(A, subset, i+1);
            //excluding the element
            subset.remove(subset.size() - 1);
        }
    }

    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();

        ArrayList<Integer> A = new ArrayList<Integer>();
        for(int i=0;i<n;i++) {
            A.add(i + 1);
        }
        System.out.println(subsets(A));
    }
}

但是,如果我在subsetills函数中打印子集值,就可以了。

添加到解决方案中的所有子集列表都是相同的实例。它逐渐变异,直到没有任何元素

更改:

solution.add(subset);
致:

solution.add(新的ArrayList(子集));

添加到解决方案的所有子集列表都是同一个实例。它逐渐变异,直到没有任何元素

更改:

solution.add(subset);
致:

solution.add(新的ArrayList(子集));
solution.add(new ArrayList<>(subset));