![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7524dbe0448cadf09f94f6e535f32a05.png)
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
if not nums: return []
res = []
def backtrack(i,track):
res.append(track.copy())
for k in range(i,len(nums)):
track.append(nums[k])
backtrack(k+1,track)
track.pop()
sub_track = []
backtrack(0,sub_track)
return res
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dafc25b8f5aa414fd7e0f528e260aaac.png)
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
def backtrack(begin,path):
res.append(path[:])
for i in range(begin,size):
if i>begin and nums[i-1]==nums[i]:
continue
path.append(nums[i])
backtrack(i+1,path)
path.pop()
size = len(nums)
if size == 0:
return [[]]
nums.sort()
path = []
res = []
backtrack(0,path)
return res