您的位置:首页 > 其它

【leetcode题解】【回溯】【54】【M】Subsets II

2015-12-15 20:01 483 查看
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
'''
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: