题目描述:
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集不能包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums 中的所有元素 互不相同
解题思路:
使用集合来做,我们遍历一边数组,每当遇到新的元素时,我们只需要将之前得到的子集添加上该元素,就可以得到新的子集。
代码:
public class LC78 {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ansList = new ArrayList<>();
//先添入一个空的List
ansList.add(new ArrayList<>());
for (int i = 0;i < nums.length; i++){
int size = ansList.size();
//代表ansList当前有多少个子集,遍历其子集
for (int j = 0; j < size; j++){
//遍历之前的子集,在之前的自己后面添加当前的这个元素,构成一个新的子集
//注意此时ansList.get(j)得到的时一个List<Integer>
ArrayList<Integer> tmpList = new ArrayList<>(ansList.get(j));
tmpList.add(nums[i]);
ansList.add(tmpList);
}
}
return ansList;
}
public static void main(String[] args) {
LC78 obj = new LC78();
int[] nums = {1,2,3};
obj.subsets(nums).forEach(System.out::println);
}
}