LeetCode:78.子集

解答

python 复制代码
class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res=[[]]
        for i in nums:
            res+=[[i]+num for num in res]
        return res

代码解释

这段代码定义了一个名为Solution的类,并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作为输入,并返回该列表的所有可能子集。

  1. 初始化结果列表res = [[]]。开始时,结果列表res只包含一个空集,因为空集是任何集合的子集。

  2. 遍历输入列表for i in nums:。对于输入列表nums中的每一个元素i,都会执行一次循环。

  3. 构建新子集res += [[i] + num for num in res]。在每次循环中,都会生成一个新的子集列表,该列表由两部分组成:

    • 当前元素i单独作为一个新子集(但实际上它会被加到一个空集[]前面,所以实际上还是[i])。
    • 将当前元素i添加到res中的每一个现有子集的开头,形成一个新的子集。

    这里使用了列表推导式[i] + num for num in res,它遍历了res中的所有现有子集num,并将i与每个num组合成一个新的子集。

  4. 更新结果列表res += ...。每次循环后,新的子集列表都会与原始res列表合并,更新res以包含所有新的子集。

  5. 返回结果 :当遍历完nums中的所有元素后,res将包含nums的所有可能子集,包括空集和nums自身。最后返回这个列表。

例子

假设我们有以下输入:

python 复制代码
nums = [1, 2]

以下是subsets方法的执行步骤和生成的子集列表:

  1. 初始化结果列表:res = [[]]

    此时res是:[[]]

  2. 遍历第一个元素1

    添加1到每个现有子集中(目前只有一个空集):res = [[]] + [[1] + []]

    此时res是:[[], [1]]

  3. 遍历第二个元素2

    添加2到每个现有子集中:res = [[], [1]] + [[2] + [], [2] + [1]]

    此时res是:[[], [1], [2], [1, 2]]

  4. 返回结果列表。

所以,对于输入nums = [1, 2]subsets方法将返回:

python 复制代码
[
    [], 
    [1], 
    [2], 
    [1, 2]
]

这个列表包含了nums的所有可能子集。

相关推荐
兵慌码乱4 小时前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei6 小时前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi0012 小时前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn13 小时前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
JieE2121 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
金銀銅鐵1 天前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup111 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill
aqi002 天前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用