回溯-子集型
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下