LeetCode(python)78.子集

题目

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

复制代码
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

复制代码
输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

思路

每个数字都有两种选择(选/不选)用递归解决:

递归的三要素:

1.递归函数要做什么

(1)对每个数字进行决策,选还是不选

(2)把决策后的子集收集到最终的结果中

2.终止条件------当所有数字都决策过了,就存入此次递归的结果

3.单层逻辑

处理当前第index个元素时,有两种选择:

(1)选当前元素->加入临时子集->继续决策下一个元素

(2)不选当前元素->把它从临时子集中剔除->继续决策下一个元素(回溯)

代码

注意!res.append(temp:),不能写成res.append(temp),这样存的是temp的引用,后续会随着递归而改变

python 复制代码
class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res = []    # 存结果
        temp = []   # 存临时子集

        def dfs(index):
            if index == len(nums):        # 终止条件
                res.append(temp[:])       # 注意!一定要加:,不然存的就是temp的引用,会随着递归时temp的变换而变换,导致最后全为空
                return
            temp.append(nums[index])      # 选当前元素
            dfs(index + 1)                # 继续决策下一个

            temp.pop()                    # 不选
            dfs(index + 1)                # 继续决策下一个
        
        dfs(0)                            # 从第一个元素开始处理
        return res
相关推荐
码农小河668 分钟前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
用户8356290780511 小时前
使用 Python 在 Excel 中添加和自定义迷你图
后端·python
老师我太想进步了20261 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
用户8356290780511 小时前
使用 Python 在 Excel 图表中添加趋势线与回归方程
后端·python
风影同志783241 小时前
编码器是激活函数吗?—— 一个看起来很像、其实不是的类比
算法
特立独行的猫A1 小时前
一份 Markdown 发十个平台:cspub 一稿多投
java·后端·python
UIU1141 小时前
P1481 魔族密码
c++·算法·动态规划
深蓝AI2 小时前
HTTPX 超时 1 秒,接口为何还能跑 2.4 秒?
python
CyrusYiVPP2 小时前
哪个用户会再来买?RFM模型+plotly画出用户分层,数据分析实战第2期
人工智能·python
文丑颜不良啊2 小时前
LeetCode1961~1980题目解析
java·leetcode