Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Subsets的扩展题,这题里S可能出现重复元素~
如果是重复数字, 只扩展上一次的结果preSet, 如果是不重复数字, 则扩展全部结果res~
class Solution:
# @param num, a list of integer
# @return a list of lists of integer
def subsetsWithDup(self, S):
res, preSet, preNum = [[]], [], None
S.sort()
for num in S:
oldSet = res[:] if num != preNum else preSet[:]
preNum = num
preSet = []
for j in oldSet:
preSet.append(j + [num])
res.append(j + [num])
return res