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

相关推荐
是小Y啦8 分钟前
leetcode 106.从中序与后续遍历序列构造二叉树
数据结构·算法·leetcode
liuyang-neu18 分钟前
力扣 42.接雨水
java·算法·leetcode
y_dd25 分钟前
【machine learning-12-多元线性回归】
算法·机器学习·线性回归
m0_6312704025 分钟前
标准c语言(一)
c语言·开发语言·算法
万河归海42826 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio
小周的C语言学习笔记30 分钟前
鹏哥C语言36-37---循环/分支语句练习(折半查找算法)
c语言·算法·visual studio
y_dd31 分钟前
【machine learning-七-线性回归之成本函数】
算法·回归·线性回归
小魏冬琅1 小时前
K-means 算法的介绍与应用
算法·机器学习·kmeans
农民小飞侠1 小时前
python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能
开发语言·python
战神刘玉栋1 小时前
《程序猿之设计模式实战 · 观察者模式》
python·观察者模式·设计模式