leetcode 子集2

版权声明: https://blog.csdn.net/hsc_1/article/details/82954197

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

说明:解集不能包含重复的子集。

示例:

输入: [1,2,2]
输出:
[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]

我的愚笨的解答

class Solution:
    def subsetsWithDup(self, nums):
        nums.sort()
        results = [[]]
        for i in range(len(nums)):
            new_results = []
            for result in results:
                if i > 0 and nums[i] == nums[i - 1] and len(result) > 0 and result[-1] == nums[i]:
                    new_results.append(result + [nums[i]])
                    continue
                new_results.append(result + [nums[i]])
                new_results.append(result)
            results = new_results
        return results

别人的特别美的解答, 如果和前面的值一样的话,那么只需要在之前加过的同样的值后面添加即可

    def subsetsWithDup(self, nums):
        nums.sort()
        res = [[]]
        for i in range(len(nums)):
            if i == 0 or nums[i] != nums[i - 1]:
                l = len(res)
            for j in range(len(res) - l, len(res)):
                res.append(res[j] + [nums[i]])
        return res

猜你喜欢

转载自blog.csdn.net/hsc_1/article/details/82954197