题目描述
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
样例描述
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
思路
迭代枚举
- 每个子集都有空集,先加入空集。
- 遍历数组,每来一个新元素就加入到所以的子集形成新的子集在加入到结果集。
- 注意遍历结果集时,长度要先提前求出来,不能直接用res.size(),因为res的size不断变大,可能循环超时了。
代码
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
//先加入空集
res.add(new ArrayList<Integer>());
//对每个新元素,都加入到原来的子集形成新的子集
for (int num: nums) {
//提前记录原来的子集长度,如果后面循环直接写res.size()就死循环了 因为size不断变大
int size = res.size();
for (int i = 0; i < size; i ++ ) {
//这里必须new一个,不是直接get,因为要加入新的,是新的引用
List<Integer> newSub = new ArrayList<>(res.get(i));
newSub.add(num);
res.add(newSub);
}
}
return res;
}
}