几乎相同的代码,无法找出任何区别

时间:2019-07-20 08:39:59

标签: algorithm

public List<List<Integer>> subsets(int[] nums) {
    List<List<Integer>> result = new ArrayList<>();
    result.add(new ArrayList<>());

    for(int i=0; i<nums.length; i++){
        int size = result.size();
        for(int j=0; j<size; j++){
            List<Integer> temp = new ArrayList<>(result.get(j));
            temp.add(nums[i]);
            result.add(temp);
        }
    }
    return result;
}

https://leetcode.com/problems/subsets/submissions/

这是我对Leetcode的解决方案。以上算法效果很好。

我的问题是,当我在如下所示的for for循环中更改一些代码时

    for(int j=0; j<size; j++){
        List<Integer> temp = new ArrayList<>(result.get(j));
        result.add(temp.add(nums[i]));
    }

然后我得到如下错误

  

错误:找不到适用于add(boolean)

的合适方法      

result.add(temp.add(nums [i]));

我不明白为什么会收到此错误消息。

首先,我不仅找不到两者之间的任何区别,而且为什么错误消息会显示add(boolean)?我认为应该是add(int index)。这里有什么问题吗?

1 个答案:

答案 0 :(得分:3)

您的专线

result.add(temp.add(nums[i]));

不同
temp.add(nums[i]);
result.add(temp);

您不会将temp添加到结果中,而是将temp.add的结果添加为布尔值(无论元素是否已添加到集合中,在这种情况下始终为true