题目来源:
https://leetcode.com/problems/subsets-ii/
题意分析:
给定一个存在重复元素的集合,然后他所有的可能子集。子集不能包括重复元素,元素必须安排字典序排序。
题目思路:
这题和前面的找到所有子集类似。不同的是他存在重复元素,那么我们添加的时候用字典判断一下时候有重复就可以了。要注意的是list不可以当作字典的key,所以要将list转化成str充当key。要保证字典序排序,那么要将集合先进行排序。
代码(Python):
1 class Solution(object): 2 def subsetsWithDup(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: List[List[int]] 6 """ 7 nums.sort() 8 def subset(nums,index): 9 if index == 0: 10 return [[]] 11 tmp = subset(nums,index - 1) 12 ans,visit = tmp[:],{} 13 for i in tmp: 14 visit[str(i)] = True 15 for i in tmp: 16 if not str(i + [nums[index - 1]]) in visit: 17 visit[str(i + [nums[index - 1]])] = True 18 ans.append(i + [nums[index - 1]]) 19 return ans 20 return subset(nums,len(nums)) 21