leetcode 90 子集2
其中数组包含重复的元素,在迭代的时候需要先将数组进行排序,然后判断是否重复。
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
res=[[]]
nums=sorted(nums)
for i in nums:
res+=[[i]+num for num in res if [i]+num not in res]
return res通过递归方法,控制形成顺序,同时控制同一层不出现相同的元素,这里参考组合总和2。
!!!注意如果要是全排列的话,每次要从0开始遍历,为了跳过已入栈的元素,需要使用used
class Solution:
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
def dfs(i,path,result):
if i<=len(nums):
result.append(path[:])
for j in range(i,len(nums)):
if j>=1 and j>i and nums[j]==nums[j-1]:continue
dfs(j+1,path+[nums[j]],result)
nums=sorted(nums)
result=[]
dfs(0,[],result)
return result
腾讯成长空间 1170人发布