回溯-子集型

参考:回溯算法套路①子集型回溯【基础算法精讲 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
复制代码

 

posted @   r1-12king  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示