解答
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
作为输入,并返回该列表的所有可能子集。
-
初始化结果列表:
res = [[]]
。开始时,结果列表res
只包含一个空集,因为空集是任何集合的子集。 -
遍历输入列表:
for i in nums:
。对于输入列表nums
中的每一个元素i
,都会执行一次循环。 -
构建新子集:
res += [[i] + num for num in res]
。在每次循环中,都会生成一个新的子集列表,该列表由两部分组成:- 当前元素
i
单独作为一个新子集(但实际上它会被加到一个空集[]
前面,所以实际上还是[i]
)。 - 将当前元素
i
添加到res
中的每一个现有子集的开头,形成一个新的子集。
这里使用了列表推导式
[i] + num for num in res
,它遍历了res
中的所有现有子集num
,并将i
与每个num
组合成一个新的子集。 - 当前元素
-
更新结果列表:
res += ...
。每次循环后,新的子集列表都会与原始res
列表合并,更新res
以包含所有新的子集。 -
返回结果:当遍历完
nums
中的所有元素后,res
将包含nums
的所有可能子集,包括空集和nums
自身。最后返回这个列表。
例子
假设我们有以下输入:
nums = [1, 2]
以下是subsets
方法的执行步骤和生成的子集列表:
-
初始化结果列表:
res = [[]]
此时
res
是:[[]]
-
遍历第一个元素
1
:添加
1
到每个现有子集中(目前只有一个空集):res = [[]] + [[1] + []]
此时
res
是:[[], [1]]
-
遍历第二个元素
2
:添加
2
到每个现有子集中:res = [[], [1]] + [[2] + [], [2] + [1]]
此时
res
是:[[], [1], [2], [1, 2]]
-
返回结果列表。
所以,对于输入nums = [1, 2]
,subsets
方法将返回:
[
[],
[1],
[2],
[1, 2]
]
这个列表包含了nums
的所有可能子集。