Skip to content

Commit 5ad451c

Browse files
committed
Update subsets.py
1 parent a41bf1b commit 5ad451c

File tree

1 file changed

+44
-19
lines changed

1 file changed

+44
-19
lines changed

Python/subsets.py

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Time: O(n * 2^n)
22
# Space: O(1)
3-
#
3+
44
# Given a set of distinct integers, S, return all possible subsets.
55
#
66
# Note:
@@ -19,37 +19,62 @@
1919
# [1,2],
2020
# []
2121
# ]
22-
#
2322

24-
class Solution:
25-
# @param S, a list of integer
26-
# @return a list of lists of integer
27-
def subsets(self, S):
23+
class Solution(object):
24+
def subsets(self, nums):
25+
"""
26+
:type nums: List[int]
27+
:rtype: List[List[int]]
28+
"""
29+
nums.sort()
30+
result = [[]]
31+
for i in xrange(len(nums)):
32+
size = len(result)
33+
for j in xrange(size):
34+
result.append(list(result[j]))
35+
result[-1].append(nums[i])
36+
return result
37+
38+
39+
# Time: O(n * 2^n)
40+
# Space: O(1)
41+
class Solution2(object):
42+
def subsets(self, nums):
43+
"""
44+
:type nums: List[int]
45+
:rtype: List[List[int]]
46+
"""
2847
result = []
29-
i, count = 0, 1 << len(S)
30-
S = sorted(S)
48+
i, count = 0, 1 << len(nums)
49+
nums.sort()
3150

3251
while i < count:
3352
cur = []
34-
for j in xrange(len(S)):
53+
for j in xrange(len(nums)):
3554
if i & 1 << j:
36-
cur.append(S[j])
55+
cur.append(nums[j])
3756
result.append(cur)
3857
i += 1
3958

4059
return result
4160

42-
class Solution2:
43-
# @param S, a list of integer
44-
# @return a list of lists of integer
45-
def subsets(self, S):
46-
return self.subsetsRecu([], sorted(S))
61+
62+
# Time: O(n * 2^n)
63+
# Space: O(1)
64+
class Solution3(object):
65+
def subsets(self, nums):
66+
"""
67+
:type nums: List[int]
68+
:rtype: List[List[int]]
69+
"""
70+
return self.subsetsRecu([], sorted(nums))
4771

48-
def subsetsRecu(self, cur, S):
49-
if not S:
72+
def subsetsRecu(self, cur, nums):
73+
if not nums:
5074
return [cur]
5175

52-
return self.subsetsRecu(cur, S[1:]) + self.subsetsRecu(cur + [S[0]], S[1:])
53-
76+
return self.subsetsRecu(cur, nums[1:]) + self.subsetsRecu(cur + [nums[0]], nums[1:])
77+
78+
5479
if __name__ == "__main__":
5580
print Solution().subsets([1, 2, 3])

0 commit comments

Comments
 (0)