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的所有可能子集。

相关推荐
LDR00619 小时前
接口焦虑终结者:LDR6020 芯片如何重新定义 Type-C 拓展坞与多设备互联时代
数据结构·经验分享·智能音箱
m0_3776182319 小时前
Golang怎么连接MySQL数据库_Golang MySQL连接教程【总结】
jvm·数据库·python
LN花开富贵20 小时前
【ROS】鱼香ROS2学习笔记一
linux·笔记·python·学习·嵌入式·ros·agv
weixin_5860614620 小时前
C#怎么通过反射获取类属性_C#如何动态读取元数据【进阶】
jvm·数据库·python
Jurio.20 小时前
本机开发 + 多机执行的极简远端运行工具
linux·git·python·github·远程工作
skywalk816320 小时前
pytest测试的时候这是什么意思?Migrating <class ‘kotti.resources.File‘>
前端·python
overmind20 小时前
oeasy Python 121[专业选修]列表_多维列表运算_列表相加_列表相乘
java·windows·python
房开民20 小时前
可变参数模板
java·开发语言·算法
_深海凉_20 小时前
LeetCode热题100-最小栈
java·数据结构·leetcode
m0_6784854520 小时前
CSS如何控制表格单元格边框合并_通过border-collapse实现
jvm·数据库·python