LeetCode 90 SubsetsII (Python详解及实现)

【题目】

Given a collection of integers that mightcontain duplicates, nums, return all possible subsets.

 

Note: The solution set must not containduplicate subsets.

 

For example,

If nums = [1,2,2], a solution is:

 

[

 [2],

 [1],

 [1,2,2],

 [2,2],

 [1,2],

  []

]

 

 

【思路】

是78 题subsets的升级,集合中加入了重复元素,这样可以判断集合中是否已有当前子集,若无则将该子集加入到res中

 

 

【Python实现】

【题目】
Given a collection of integers that might contain duplicates, nums, return all possible subsets.

Note: 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],
  []
]


【思路】
是78 题subsets的升级,集合中加入了重复元素,这样可以判断集合中是否已有当前子集,若无则将该子集加入到res中


【Python实现】
# -*- coding: utf-8 -*-
"""
Created on Wed Aug  9 19:21:31 2017

@author: Administrator
"""

class Solution(object):
    def subsetsWithDup(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        def dfs(depth, start, valuelist):
            if valuelist  not in res:
                res.append(valuelist)
            if depth == len(nums):
                return
            for i in range(start, len(nums)):
                dfs(depth+1, i+1, valuelist+[nums[i]])
        nums.sort()
        res = []
        dfs(0, 0, [])
        print(res)
        return res
    
if __name__ == '__main__':
    S= Solution()
    
    S.subsetsWithDup([1,2,2])





 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值