参考:回溯算法套路①子集型回溯【基础算法精讲 14】
ps:0-1背包也是一种子集型回溯
注意:递归参数中的 i 不是第 i 个, 而是下标大于等于 i 的这部分
例题:
class Solution: def f1(self, nums):n = len(nums)if n==0:return []ans = []path = []def dfs(i):if i == n:ans.append(path[:])return dfs(i+1)path.append(nums[i])dfs(i+1)path.pop()dfs(0)return ans
方法二:
ps:这里的 i 指的是枚举的起点
class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:return self.f2(nums)def f2(self, nums):n = len(nums)ans = []path = []def dfs(i):ans.append(path[:])for j in range(i, n):path.append(nums[j])dfs(j+1)path.pop()dfs(0)return ans