[LeetCode]题解(python):090-Subsets II

题目来源:

  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                     
View Code

 


 

转载请注明出处:http://www.cnblogs.com/chruny/p/5088747.html 

 

posted @ 2015-12-30 14:33  Ry_Chen  阅读(219)  评论(0编辑  收藏  举报