代码随想录 -- 回溯 -- 子集

78. 子集 - 力扣(LeetCode)

如果把子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!

遍历这个树的时候,把所有节点都记录下来,就是要求的子集集合。

思路:

递归参数:nums,for循环的起始index,path数组。

递归出口:当遍历完数组nums时,return。

单层递归逻辑:将nums[i]加入path数组中,调用递归函数,将path的最后一个元素pop出来。

要在每次进入递归函数时将path收集到result中。

python 复制代码
class Solution(object):
    def back(self,nums,index,path):
        self.result.append(path[:])
        if index>=len(nums):
            return
        for i in range(index,len(nums)):
            path.append(nums[i])
            self.back(nums,i+1,path)
            path.pop()

    def subsets(self, nums):
        self.result=[]
        self.back(nums,0,[])
        return self.result
相关推荐
Sarvartha12 小时前
N 个字符串最长公共子序列(LCS)求解问题
数据结构·算法
一切皆是因缘际会12 小时前
下一代 AI 架构:基于记忆演化与单向投影的安全智能系统
大数据·人工智能·深度学习·算法·安全·架构
falldeep12 小时前
五分钟了解OpenClaw底层架构
人工智能·算法·机器学习·架构
m0_6294947312 小时前
LeetCode 热题 100-----16.除了自身以外数组的乘积
数据结构·算法·leetcode
weixin_4462608513 小时前
模型能力深度对决:GPT-4o、Claude 3.5和DeepSeek V系列模型的横向评测与未来趋势洞察
人工智能·算法·机器学习
迷途之人不知返13 小时前
优先级队列:priority_queue
数据结构·c++
jieyucx13 小时前
Go 零基础数据结构:顺序表(像「排抽屉」一样学增删改查)
java·数据结构·golang
想唱rap13 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法
重生之我是Java开发战士13 小时前
【笔试强训】Week3:重排字符串,分组,DNA序列
算法
We་ct13 小时前
LeetCode 97. 交错字符串:动态规划详解
前端·算法·leetcode·typescript·动态规划