首页 > 其他 > 详细

leetcode 每日一题 90. 子集 II

时间:2020-06-18 11:03:34      阅读:61      评论:0      收藏:0      [点我收藏+]

技术分享图片

回溯法

思路:

参考78.子集,在添加子集的时候多了判断去重操作。

代码:

class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        def backtrack(path = [],begin = 0):
            if len(path) == k:
                res.append(path[:])
                return
            for i in range(begin,len(nums)):
                if i !=begin and nums[i]==nums[i-1]:
                    continue 
                path.append(nums[i])
                backtrack(path,i+1)
                path.pop()
        nums.sort()
        res = []
        for k in range(len(nums)+1):
            backtrack()
        return res

递归

思路:

参考78.子集,在添加子集的时候多了判断去重操作。

代码:

class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        output = [[]]
        for num in nums:
            temp = output[:]
            for curr in temp:
                sub = curr + [num]
                if sub not in output:
                    output += [sub]
        return output

二进制排序

思路:

参考78.子集,在添加子集的时候多了判断去重操作。

代码:

class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        n = len(nums)
        output = []
        for i in range(2**n, 2**(n + 1)):
            bitmask = bin(i)[3:]
            temp = []
            for j in range(n):
                if bitmask[j] == 1:
                    temp.append(nums[j])
            if temp not in output:
                output.append(temp)
        return output

 

leetcode 每日一题 90. 子集 II

原文:https://www.cnblogs.com/nilhxzcode/p/13156403.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!