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