-
Notifications
You must be signed in to change notification settings - Fork 319
/
Copy path90_SubsetsII.py
53 lines (44 loc) · 1.42 KB
/
90_SubsetsII.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#! /usr/bin/env python
# -*- coding: utf-8 -*-
class Solution(object):
def subsetsWithDup(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if not nums:
return []
nums.sort()
nums_len = len(nums)
# Keep the subsets without duplicate subsets
subsets = [[nums[0]]]
# Keep the previous subsets which contains previous nums.
pre_subset = [[nums[0]]]
for i in range(1, nums_len):
# Combine current num with the previous subsets,
# Then update the previous subsets
if nums[i] == nums[i-1]:
for j in range(len(pre_subset)):
one_set = pre_subset[j][:]
one_set.append(nums[i])
subsets.append(one_set)
pre_subset[j] = one_set
# Combine current num with all the subsets before.
# Then update the previous subsets
else:
pre_subset = []
for j in range(len(subsets)):
one_set = subsets[j][:]
one_set.append(nums[i])
subsets.append(one_set)
pre_subset.append(one_set)
pre_subset.append([nums[i]])
subsets.append([nums[i]])
subsets.append([])
return subsets
"""
[]
[1,2]
[1,2,2]
[1,2,2,3,3,4,5]
"""