#!/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
最新推荐文章于 2024-07-22 16:27:42 发布