最近做題的時候,被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()
方法放進去的是對象的地址(換種方式理解就是引用),放進去以后你對外部對象的修改是會影響到原先放進去的對象的值的(因為他倆指向的是同一個地址)。正確做法是新生成一個對象在添加,如上所示。