java - java中的全局ArrayList中没有添加的值
问题描述
我在 interviewbit 上解决了这个问题,从逻辑上讲,我已经使用回溯解决了这个问题,但是我无法在ArraList
我在 main 函数之外定义的值中添加值。我的代码看起来像这样:
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,但每当我向该列表添加一个数组列表时。它没有被添加。对于输入 = 3,解决方案[[], [], [], [], [], [], [], []]
应该是这样的:
[]
[1]
[1, 2]
[1, 2, 3]
[1, 3]
[2]
[2, 3]
[3]
但是,如果我在 subsetUtils 函数中打印子集值,那就没问题了。
解决方案
您添加到解决方案的所有子集列表都是同一个实例。它逐渐变异,直到它没有元素。
改变:
solution.add(subset);
到:
solution.add(new ArrayList<>(subset));
推荐阅读
- c# - 当我尝试读取文件时出现 Json 阅读器异常
- r - 在 r 中使用 dplyr 转换变量
- c# - 需要在来自不同服务器的两个表之间同步数据 Postgresql 数据库
- c# - asp:Button CommandName 作为 UpdatePanel 的异步触发器
- android - 实现 OnSeekBarChangeListener 的自定义 Seekbar 类,从未调用过 onProgressChanged
- java - 将 Swagger UI 限制为特定角色
- python - 为什么我无法使用 Slack Bolt 库阅读聊天消息?
- python - 如何使用 python 向用户询问 Main Function 上的函数输入?
- python - 带有 BS4 和显示更多按钮的网络爬虫
- javascript - Express 静态 js 文件未加载