#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
Subsets II
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
'''
class Solution(object):
def subsetsWithDup(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
length = len(nums)
if length == 0:
return []
nums.sort()
return self.__subsets(nums,0,length,[],[],'',False)
def __subsets(self,a,start,length,result,ret,last_word,used_flag):
if start == length:
ret.append(list(result))
else:
#去重,记录上一个元素,如果与上一次元素相同,并且上一次元素没有使用,则本次也不使用
#print last_word,a[start]
if not (last_word == a[start] and used_flag == False):
last_word = a[start]
result.append(last_word)
self.__subsets(a,start + 1,length,result,ret,last_word,True)
result.pop()
self.__subsets(a,start + 1,length,result,ret,last_word,False)
return ret
if __name__ == "__main__":
s = Solution()
#print s.subsetsWithDup([1,2,2,2])
print s.subsetsWithDup([0]
80 leetcode - Subsets II
最新推荐文章于 2025-12-19 16:34:09 发布
本文介绍了一种处理包含重复元素的集合并返回所有可能子集的算法,确保结果中不包含重复的子集。该算法通过递归实现,并在过程中进行去重处理。
149

被折叠的 条评论
为什么被折叠?



