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

来源:互联网 发布:js修改url参数 不刷新 编辑:程序博客网 时间:2024/06/05 22:48

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'''


0 0
原创粉丝点击