【集合的所有子集】 问题描述: 集合的所有子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集。示例如下: 输入样例1:nums = [1, 2, 3] 输出样例1:[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] 输入样例2:nums = [0] 输出样例2:[[], [0]]
时间: 2023-08-18 20:16:48 浏览: 78
求集合的所有子集问题
这是一个很经典的回溯算法问题,可以通过递归实现。具体思路是:每次递归时,有两个选择,一是选择当前数字加入子集,二是不选择当前数字,不断递归直到处理完所有数字,将得到的子集加入结果集中。
下面是该问题的 Python 代码实现:
```python
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
res = []
self.dfs(nums, [], res)
return res
def dfs(self, nums, path, res):
res.append(path)
for i in range(len(nums)):
self.dfs(nums[i+1:], path+[nums[i]], res)
```
该算法的时间复杂度为 $O(2^n)$,因为对于每个数字,都有选择和不选择两种情况,共 $2^n$ 种情况。
阅读全文