class Solution(object):
def subsets(self, nums, ind, unret):
if ind<0:
unret.add(())
return
self.subsets(nums, ind-1, unret)
for ret in list(unret):
t = list(ret)
t.append(nums[ind])
t=tuple(t)
unret.add(t)
def subsetsWithDup0(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort()
unret=set()
self.subsets(nums, len(nums)-1, unret)
ret=[]
for v in unret:
ret.append(list(v))
return ret
def subsetsWithDup(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort()
unret=set()
ret=[[]]
lastv=None
i0=0
i1=len(ret)
for v in nums:
if lastv!=v:
i0=0
for i in xrange(i0, i1):
r1=ret[i][:]
r1.append(v)
ret.append(r1)
i0=i1
i1=len(ret)
lastv=v
return ret