78. 子集
思路
一开始首先做出了题目对应的树形。
第一个想法是每一层一个循环,因为它的树枝的减少是有规律的。后来写着发现太复杂了,所以放弃了。后来又想了两种思路,一种是每次把原有的集合中的元素取出并添加之前未添加过的新数字,一种是用回溯算法 。之后选择了用回溯算法写,因为想训练一下。
代码
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
nums.sort()
results = []
track = []
results.append(track.copy())
def trackBack(start):
nonlocal results,track
for i in range(start,len(nums)):
track.append(nums[i])
results.append(track.copy())
trackBack(i+1)#不重复
track.pop()
trackBack(0)
return results