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

175 篇文章 0 订阅
157 篇文章 0 订阅

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值