最近做题的时候,被List的add操作坑了一下
List<List<Integer>> answer = new ArrayList<>();
List<Integer> data = new ArrayList<>();
public List<List<Integer>> binarySolution(int[] nums) {
int len = nums.length;
for (int mask = 0; mask < (1 << len); mask++) {
data.clear();
// 获取二进制位置为1的值对应的数
for(int i=0;i<len;i++) {
if((mask & (1<<i)) != 0) {
data.add(nums[i]);
}
}
answer.add(new ArrayList<>(data)); // 就是这里!
}
return answer;
}
因为List的add()
方法放进去的是对象的地址(换种方式理解就是引用),放进去以后你对外部对象的修改是会影响到原先放进去的对象的值的(因为他俩指向的是同一个地址)。正确做法是新生成一个对象在添加,如上所示。