Skip to content

Commit e9a5457

Browse files
committed
problem: 0078 subsets
1 parent 7e19616 commit e9a5457

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

0078 Subsets/0078 Subsets.md

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# 0078. Subsets
2+
3+
* Difficulty: medium
4+
* Link: <https://leetcode.com/problems/subsets/>
5+
* Topics: Array-String, Backtracking
6+
7+
# Clarification
8+
9+
1. Check the inputs and outputs
10+
* INPUT: List[int]
11+
* OUTPUT: List[List[int]]
12+
13+
# Naive Solution
14+
15+
### Thought Process
16+
17+
1. 一個一個決定取或不取
18+
2. 加到 result 前判斷是否存在於 result 了
19+
20+
* Implement
21+
22+
```python
23+
class Solution:
24+
def subsets(self, nums: List[int]) -> List[List[int]]:
25+
result = []
26+
subset = []
27+
28+
def add_subset(subset, idx):
29+
if subset not in result:
30+
result.append(subset)
31+
if idx == len(nums):
32+
return
33+
add_subset(subset + [nums[idx]], idx + 1)
34+
add_subset(subset, idx + 1)
35+
add_subset(subset,0)
36+
return result
37+
```
38+
39+
* 應該是要在 idx == nums 再 append ,就不會有重複 append 的情況
40+
41+
```jsx
42+
class Solution:
43+
def subsets(self, nums: List[int]) -> List[List[int]]:
44+
result = []
45+
subset = []
46+
47+
def add_subset(subset, idx):
48+
if idx == len(nums):
49+
result.append(subset)
50+
return
51+
add_subset(subset + [nums[idx]], idx + 1)
52+
add_subset(subset, idx + 1)
53+
add_subset(subset,0)
54+
return result
55+
```
56+
57+
### Complexity
58+
59+
* Time complexity: $O(2^N)$
60+
* Space complexity:$O(N)$
61+
62+
### Problems & Improvement
63+
64+
* Time complexity 很高
65+
66+
# Improvement
67+
68+
### Thought Process
69+
70+
1. 之前所有的組合 (沒有選當前數字),再全部加入目前數字(選當前數字)
71+
72+
```jsx
73+
Example : [1,2,3]
74+
result = [[]]
75+
==== idx = 0 ====
76+
[]
77+
----
78+
[1]
79+
==== idx = 1 ====
80+
[]
81+
[1]
82+
----
83+
[2]
84+
[1,2]
85+
==== idx = 2 ====
86+
[]
87+
[1]
88+
[2]
89+
[1,2]
90+
----
91+
[3]
92+
[1,3]
93+
[2,3]
94+
[1,2,3]
95+
```
96+
97+
* Implement
98+
99+
```python
100+
class Solution:
101+
def subsets(self, nums: List[int]) -> List[List[int]]:
102+
result = [[]]
103+
for num in nums:
104+
for idx in range(len(result)):
105+
result.append(result[idx] + [num])
106+
return result
107+
```
108+
109+
```jsx
110+
class Solution:
111+
def subsets(self, nums: List[int]) -> List[List[int]]:
112+
result = [[]]
113+
for num in nums:
114+
result+= [subset + [num] for subset in result]
115+
116+
return result
117+
```
118+
119+
### Complexity
120+
121+
* Time complexity: $O(N^2)$
122+
* Space complexity:$O(N)$

0 commit comments

Comments
 (0)