我在子集中推送子集列表,二维列表但是返回的值是一个空的二维列表,为什么?
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<Integer> subset = new ArrayList<>();
List<List<Integer>> subsets = new ArrayList<>();
int x = (int) Math.pow(2,nums.length);
for(int i=0;i<x;i++){
for(int j=0;j<nums.length;j++){
if((i & (1<<j))!=0)
subset.add(nums[j]);
}
Collections.sort(subset);
subsets.add(subset);
subset.clear();
}
return subsets;
}
}
答案 0 :(得分:0)
查看你的代码,
subsets.add(subset);
subset.clear();
您要添加列表,然后擦除内容。
我建议你将subset
的实例化移动到你的循环中,然后在每次迭代时你将有新的子元素
答案 1 :(得分:-1)
当您致电List#add(var)
时,您需要存储var
点的相同引用,现在该引用来自两个地方:List
内部和var
内部。由于您不存储列表的副本,但var
和List
引用的相同列表是可变的,因此当您更改var
的状态时,此更改也将是反映在存储在另一个容器内的列表中。
在您当前的代码中,您在将subset#clear
添加到subset
后调用了subsets
,因此您需要清除subset
的内容,存储在subset
中的列表对象引用也会受到影响(因为它毕竟是相同的列表)。如果要继续使用相同的列表添加元素,则应创建一个新的对象引用,如下所示:
subsets.add(subset);
//subset.clear();
subset = new Arrayist<>();