题目链接
英文链接:https://leetcode.com/problems/subsets/
中文链接:https://leetcode-cn.com/problems/subsets/
题目详述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
1 | 输入: nums = [1,2,3] |
题目详解
DFS,回溯。
首先将当前集合加入到结果集中。
枚举每一个可能的元素。
- 进入下一层将当前元素加入临时集合中。
- 递归进入下一层,传入的是当前位置的下一个位置。
- 恢复原状。
1 | public class LeetCode_00078 { |
因为是求数组 nums 所有的子集,每个元素有选与不选两种选择,实际上可以直接枚举得到所有的子集。
- 设 nums 的大小为 n,则子集的个数为 2n。
- n 个二进制位与 nums 的 n 个元素一一对应。
- 二进制位为 1,表示选择了对应的元素;二进制位为 0,表示没有选择对应的元素。
- 从 0 枚举到 2n - 1(每一个子集),把当前数的二进制位上所有 1 对应的元素添加到当前子集中。
1 | public class LeetCode_00078 { |
还可以从空集开始,通过逐步添加元素的方法来得到所有的子集。
- 首先在结果集中添加一个空集。
- 遍历数组 nums。
- 遍历原来所有的子集,把原来子集拷贝一份,再把当前元素添加入这个子集,得到新的子集。
- 两重循环完成后,就得到了结果。
1 | public class LeetCode_00078 { |