幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
分析:
方法1:DFS+回溯
拿 [1,2,3] 举例,寻找它的子集过程可以看做:
- [ ] 空集开始
- [1] 添加 1
- [1,2] 添加 2
- [1,2,3] 添加 3,遍历到头
- [1,3] 回溯到 [1],添加 3,遍历到头
- [2] 回溯到 [ ],添加 2
- [2,3] 添加 3,遍历到头
- [3] 回溯到 [ ],添加 3
我们可以用深度遍历(DFS)来模拟这个过程,递归参数为数组索引,递归终止条件就是遍历到头,每一次递归我们就添加一次子集,子集添加当前元素,回溯时,就将当前元素删除。
时间复杂度:O(2^n) 假设数组是个二进制数,里面的数字只有选中和未选中状态即 1 和 0,那么它的子集个数就是这个二进制数,即 2^n
空间复杂度:O(2