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

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
相关推荐
Languorous.13 小时前
C++数据结构进阶|图(Graph)详解:从存储到面试高频算法实战
算法
我头发还没掉光~13 小时前
P4147 玉蟾宫
数据结构·c++·算法
枕星而眠13 小时前
栈(Stack)与队列(Queue)核心知识总结
c语言·数据结构·后端·链表
江汉似年13 小时前
强化学习中的 On-policy 与 Off-policy 全面解析
人工智能·深度学习·算法·rl
code bean14 小时前
【LangChain 】 自定义解析器实战指南:从原理到 10 个业务场景落地
算法·langchain
Little At Air14 小时前
LinuxOS阻塞队列模型(单生产者单消费者)
linux·数据结构·c++
念恒1230614 小时前
基础IO(一切皆文件)
linux·c语言·c++·算法
d111111111d14 小时前
MQTT+STM32+云平台+AT命令的编写
服务器·笔记·stm32·单片机·嵌入式硬件·算法
铁皮哥14 小时前
【力扣题解】LeetCode 25. K 个一组翻转链表
java·数据结构·windows·python·算法·leetcode·链表
ZOOOOOOU15 小时前
云平台赋能门禁终端,打造智慧社区一体化管理
大数据·数据结构·架构