一、题目描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
二、思路
方案1:枚举
对于集合{1,2,3}的子集 首先,创建出来一个空集合[],加入到结果集中
遍历数组中的元素:
拿到1,对现有的结果集([])追加1,得到[1],加入到结果集中,现在的结果集为[]、[1]
拿到2,对现有的结果集追加2,对[]追加2得到[2],对[1]追加2得到[1,2],都加入到结果集中,因此现在的结果集为[]、[1]、[2]、[1,2]
拿到3,对现有的结果集追加3,从而得到[3]、[1,3]、[2,3]、[1,2,3],加上上一次的,得到全部的8个子集
三、代码实现
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
//先加入一个空集
result.add(new ArrayList<>());
//遍历数组中的元素
for (int n : nums) {
int size = result.size();
for (int i = 0; i < size; i++) {
//遍历之前的所有子集,重新生成一个新的子集
List<Integer> subList = new ArrayList<>(result.get(i));
//往新的子集中加入该元素
subList.add(n);
//将本次生成的子集加入到结果集中
result.add(subList);
}
}
return result;
}
提交答案: