gpt4 book ai didi

java - Java 中的全局 ArrayList 中未添加值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:18 24 4
gpt4 key购买 nike

我正在解决 this interviewbit 上的问题,逻辑上我已经使用回溯解决了它,但我无法在我在 main 函数外部定义的 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));
}
}

在这里,我已将 solution 声明为所有函数之外的 arrayList,但每当我将数组列表添加到此列表时。它没有被添加。对于 input = 3,解决方案是 [[], [], [], [], [], [], [], []] 应该是这样的:

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

但如果我在 subsetUtils 函数中打印子集值,就没问题。

最佳答案

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

改变:

solution.add(subset);

到:

solution.add(new ArrayList<>(subset));

关于java - Java 中的全局 ArrayList 中未添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52817894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com