Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Subscribe to see which companies asked this question
方法一,跳过相同元素(不能用if,得用while,总忘)
方法二,跟subset一样,添加结果的时候判断,是否重复
class Solution(object):
def bt(self,nums,temp,start,l,res):
#print start,l,temp
if len(temp) > l:
return
if len(temp) == l:# and temp not in res:
#print 'added'
res.append(temp[:])
return
i = start
while i <len(nums):
#temp.append(nums[i])
self.bt(nums,temp+[nums[i]],i+1,l,res)
while i<len(nums)-1 and nums[i] == nums[i+1]:
i+=1
continue
i += 1
#temp.pop(-1)
def subsetsWithDup(self, nums):
nums.sort()
res = []
for i in range(0,len(nums)+1):
self.bt(nums,[],0,i,res)
return res
'''
class Solution(object):
def bt(self,nums,temp,start,l,res):
#print start,l,temp
if len(temp) > l:
return
if len(temp) == l and temp not in res:
res.append(temp[:])
#return
for i in range(start,len(nums)):
#temp.append(nums[i])
self.bt(nums,temp+[nums[i]],i+1,l,res) #最开始i+1 写成了 start+1,那肯定是错了啊!!
#temp.pop(-1)
def subsetsWithDup(self, nums):
res = []
nums.sort()
for i in range(0,len(nums)+1):
#print '______'
self.bt(nums,[],0,i,res)
return res
'''