子集

78. 子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

1
2
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

1
2
输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

解题思路

子集问题

如果把子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!

即每次递归都要把记录保存

image-20230824112125719

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> path = new ArrayList<>();

public List<List<Integer>> subsets(int[] nums) {
backtracking(nums,0);
return res;
}

public void backtracking(int[] nums, int index){
res.add(new ArrayList<>(path)); //遍历的时候,把所有子集都记录下来
if(index == nums.length){
return;
}
for(int i = index ; i<nums.length; i++){
path.add(nums[i]);
backtracking(nums, i+1); //递归
path.remove(path.size()-1);//回溯
}
}
}

子集
http://example.com/2023/05/04/算法/回溯/8. 子集/
作者
PALE13
发布于
2023年5月4日
许可协议