版权声明: 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