这个题解使用回溯算法来生成所有可能的子集。主要思路是:从空集开始,依次考虑数组中的每个元素,可以选择将当前元素加入子集,也可以不加入,然后递归地继续处理剩余元素,直到处理完所有元素。在回溯过程中,通过维护一个路径数组 path 来记录当前子集,并在每次递归时将当前路径加入结果集中。通过回溯的方式,可以生成所有可能的子集组合。
时间复杂度: O(n * 2^n)
空间复杂度: O(2^n)
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
result = []
def backtrack(path, start):
# 将当前路径加入结果集
result.append(list(path))
# 如果当前路径长度已经等于数组长度,停止递归
if len(path) >= len(nums):
return
# 从 start 开始,选择每个元素是否加入当前路径
for i in range(start, len(nums)):
path.append(nums[i]) # 选择当前元素
backtrack(path, i+1) # 递归处理剩余元素
path.pop() # 回溯,移除当前元素
backtrack([], 0)
return result