LeetCode:78. 子集
2022-08-01 本文已影响0人
alex很累
问题描述
给你一个整数数组 nums
,数组中的元素 互不相同
。返回该数组所有可能的子集(幂集)。
解集 不能
包含重复的子集。你可以按 任意顺序
返回解集。
示例
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
输入:nums = [0]
输出:[[],[0]]
解题思路
- 用递归进行枚举模拟
- 用迭代进行枚举模拟
代码示例(JAVA)
1. 递归
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
dfs(nums, new ArrayList<>(), 0, ans);
return ans;
}
public void dfs(int[] nums, List<Integer> list, int index, List<List<Integer>> ans) {
if (index == nums.length) {
ans.add(list);
return;
}
// 不放
dfs(nums, new ArrayList<>(list), index + 1, ans);
// 放
list.add(nums[index]);
dfs(nums, new ArrayList<>(list), index + 1, ans);
}
}
2. 迭代
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
ans.add(new ArrayList<>());
for (int i = 0; i <= nums.length - 1; i++) {
int curSize = ans.size();
for (int j = 0; j < curSize; j++) {
ans.add(new ArrayList<>(ans.get(j)));
}
for (int j = 0; j < ans.size() / 2; j++) {
ans.get(j).add(nums[i]);
}
}
return ans;
}
}