美文网首页
2019-05-24LeetCode90. 子集 II

2019-05-24LeetCode90. 子集 II

作者: mztkenan | 来源:发表于2019-05-24 10:20 被阅读0次
class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()  # 避免[4,1,4]最后的结果[1,4][4,1]的重复
        t,res=len(nums),set()
        for i in range(1<<t):
            tmp,line=[],0
            for j in range(t):
                if i&(1<<j):
                    c=nums[j]
                    tmp.append(c)
                    line+=c
            res.add(tuple(tmp))  #之所以要这么麻烦是因为list可变无法hash
        re=[]
        for i in res:
            re.append(list(i))  #将tuple转化为list
        return re

思考方法当然先排序,然后如果不重复那自然简单的把原先的子集扩充一倍,如果重复的话,由于地位和重复的数字一样,就只能加入原先包括重复数字的子集中

class Solution2:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res=[[]]
        for i in range(len(nums)):
            if(i==0 or nums[i]!=nums[i-1]):
                l=len(res)
                for t in range(len(res)):
                    res.append(res[t]+[nums[i]])
            else:
                p=len(res)
                for t in range(l,len(res)):
                    res.append(res[t]+[nums[i]])
                l=p
        return res
``
参考如下代码但是真的写不出啊臣妾,其中难以理解的主要是l,l表示最后一次不等的时候生成了多少新的子集。比如[1,2,2,2]  [[],[1],[2],[1,2]], 此时l=2,以后每次生成2个新的子集。

class Solution3:
# @param num, a list of integer
# @return a list of lists of integer
def subsetsWithDup(self, S):
res = [[]]
S.sort()
for i in range(len(S)):
if i == 0 or S[i] != S[i - 1]:
l = len(res)
for j in range(len(res) - l, len(res)):
res.append(res[j] + [S[i]])
return res

相关文章

  • 2019-05-24LeetCode90. 子集 II

    思考方法当然先排序,然后如果不重复那自然简单的把原先的子集扩充一倍,如果重复的话,由于地位和重复的数字一样,就只能...

  • Leetcode 90 子集 II

    90. 子集 II[https://leetcode-cn.com/problems/subsets-ii/] 题...

  • 子集 II

    给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 ...

  • Leetcode 子集 II

    题目描述 leetcode 第90题:子集 II[https://leetcode-cn.com/problems...

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

  • 90. Subsets II/子集 II

    Given a collection of integers that might contain duplica...

  • Python Leetcode练习2(4.29/5.2作业)

    90. Subsets II 题目概述:给定一个含有重复数字的集合,求出它的所有子集。注意这些子集中没有相同的两个...

  • 90.子集II

    题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集...

  • 子集 II(LeetCode 90)

    题目https://www.jianshu.com/p/3150417100af升级版 给定一个可能包含重复元素的...

  • 90.子集 II

    原题 https://leetcode-cn.com/problems/subsets-ii/ 解题思路 同 78...

网友评论

      本文标题:2019-05-24LeetCode90. 子集 II

      本文链接:https://www.haomeiwen.com/subject/mpgwzqtx.html