给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
这种需要告知具体路径的,就不能用动态规划了,只能回溯
1, 以当前位置为源流往下摸排所有可以跳到的位置
2, 最终递归返回源流位置
3, 然后再以下面一个位置作为源流位置,重复上述操作
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = []
search = []
self._dfs(nums, 0, search, result)
return result
def _dfs(self, nums, index, search, result):
result.append(search.copy())
for i in range(index, len(nums)):
# 以当前位置为源流
search.append(nums[i])
# 往下摸排所有可以跳到的位置
self._dfs(nums, i + 1, search, result)
# 最终递归返回源流位置,然后再以下面一个位置作为源流位置,重复上述操作
search.pop()