java嵌套集合的⼀个⼩坑,list.add(list)的问题这是⼒扣上的第77题,题⽬描述如下
给定两个整数n和k,返回范围[1, n]中所有可能的k个数的组合。
你可以按任何顺序返回答案。
⽰例 1:
输⼊:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
⽰例 2:
输⼊:n = 1, k = 1
输出:[[1]]
先上代码
public class LeetCode_77_1 {
public static void main(String[] args) {
List<List<Integer>> combine = combine(4, 2);
}
public static List<List<Integer>> combine(int n, int k) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> app = new ArrayList<>();
backtracking(list,app,n,k,1);
System.out.println("list集合结果"+String());
字符串截取拼接return list;
}
public static void backtracking(List<List<Integer>> list,List<Integer> app,int n,int k,int index){
if(app.size()+(n-index+1)<k) return;
if(app.size()==k){
list.add(app);
System.out.println("app.size()==k app:"+app);
System.out.println("app.size()==k list:"+list);
return;
}
for (int i=index;i<=n;i++){
app.add(i);
backtracking(list,app,n,k,i+1);
}
}
}
结果如下
图1
这道题我⽤了递归回溯来进⾏处理,例如下图
图2
写完之后查看结果,个数是对应上,但是值为空值
查看代码调⽤输出,app的结果是正常,但是list结果跟着app结果进⾏全部修改
list.add(app)传⼊数据时,我认为是把两个数组的值传进去了,但实际list输出之后才发现其实list存的是app的地址就像List:{app.hashCode(),app.hashCode(),app.hashCode(),app.hashCode(),app.hashCode(),app.hashCode()}每次都是吧app的地址传进去了,app修改之后,list内部也是引⽤app的地址获取到的数据就跟图1结果⼀样
因此如果添加嵌套list时,需使⽤list.add(new ArratList<T>(app))才可以将数据真正的存⼊list
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论