Skip to content

Commit fb575e4

Browse files
committed
feat: add solutions to lcci problem: No.08.04
No.08.04.Power Set
1 parent 37f56a8 commit fb575e4

File tree

6 files changed

+249
-2
lines changed

6 files changed

+249
-2
lines changed

lcci/08.04.Power Set/README.md

+86-1
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,49 @@
3838
<!-- 这里可写当前语言的特殊实现逻辑 -->
3939

4040
```python
41-
41+
class Solution:
42+
def subsets(self, nums: List[int]) -> List[List[int]]:
43+
def dfs(u, t):
44+
if u == len(nums):
45+
ans.append(t[:])
46+
return
47+
t.append(nums[u])
48+
dfs(u + 1, t)
49+
t.pop()
50+
dfs(u + 1, t)
51+
52+
ans = []
53+
dfs(0, [])
54+
return ans
4255
```
4356

4457
### **Java**
4558

4659
<!-- 这里可写当前语言的特殊实现逻辑 -->
4760

4861
```java
62+
class Solution {
63+
private List<List<Integer>> ans;
64+
private int[] nums;
65+
66+
public List<List<Integer>> subsets(int[] nums) {
67+
ans = new ArrayList<>();
68+
this.nums = nums;
69+
dfs(0, new ArrayList<>());
70+
return ans;
71+
}
4972

73+
private void dfs(int u, List<Integer> t) {
74+
if (u == nums.length) {
75+
ans.add(new ArrayList<>(t));
76+
return;
77+
}
78+
t.add(nums[u]);
79+
dfs(u + 1, t);
80+
t.remove(t.size() - 1);
81+
dfs(u + 1, t);
82+
}
83+
}
5084
```
5185

5286
### **JavaScript**
@@ -146,6 +180,57 @@ impl Solution {
146180
}
147181
```
148182

183+
### **C++**
184+
185+
```cpp
186+
class Solution {
187+
public:
188+
vector<vector<int>> subsets(vector<int>& nums) {
189+
vector<int> t;
190+
vector<vector<int>> ans;
191+
dfs(0, t, nums, ans);
192+
return ans;
193+
}
194+
195+
void dfs(int u, vector<int>& t, vector<int>& nums, vector<vector<int>>& ans) {
196+
if (u == nums.size())
197+
{
198+
ans.push_back(t);
199+
return;
200+
}
201+
t.push_back(nums[u]);
202+
dfs(u + 1, t, nums, ans);
203+
t.pop_back();
204+
dfs(u + 1, t, nums, ans);
205+
}
206+
};
207+
```
208+
209+
### **Go**
210+
211+
```go
212+
func subsets(nums []int) [][]int {
213+
var ans [][]int
214+
var dfs func(u int, t []int)
215+
dfs = func(u int, t []int) {
216+
if u == len(nums) {
217+
cp := make([]int, len(t))
218+
copy(cp, t)
219+
ans = append(ans, cp)
220+
return
221+
}
222+
t = append(t, nums[u])
223+
dfs(u+1, t)
224+
t = t[:len(t)-1]
225+
dfs(u+1, t)
226+
227+
}
228+
var t []int
229+
dfs(0, t)
230+
return ans
231+
}
232+
```
233+
149234
### **...**
150235

151236
```

lcci/08.04.Power Set/README_EN.md

+86-1
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,47 @@ Backtracking
4747
### **Python3**
4848

4949
```python
50-
50+
class Solution:
51+
def subsets(self, nums: List[int]) -> List[List[int]]:
52+
def dfs(u, t):
53+
if u == len(nums):
54+
ans.append(t[:])
55+
return
56+
t.append(nums[u])
57+
dfs(u + 1, t)
58+
t.pop()
59+
dfs(u + 1, t)
60+
61+
ans = []
62+
dfs(0, [])
63+
return ans
5164
```
5265

5366
### **Java**
5467

5568
```java
69+
class Solution {
70+
private List<List<Integer>> ans;
71+
private int[] nums;
72+
73+
public List<List<Integer>> subsets(int[] nums) {
74+
ans = new ArrayList<>();
75+
this.nums = nums;
76+
dfs(0, new ArrayList<>());
77+
return ans;
78+
}
5679

80+
private void dfs(int u, List<Integer> t) {
81+
if (u == nums.length) {
82+
ans.add(new ArrayList<>(t));
83+
return;
84+
}
85+
t.add(nums[u]);
86+
dfs(u + 1, t);
87+
t.remove(t.size() - 1);
88+
dfs(u + 1, t);
89+
}
90+
}
5791
```
5892

5993
### **JavaScript**
@@ -153,6 +187,57 @@ impl Solution {
153187
}
154188
```
155189

190+
### **C++**
191+
192+
```cpp
193+
class Solution {
194+
public:
195+
vector<vector<int>> subsets(vector<int>& nums) {
196+
vector<int> t;
197+
vector<vector<int>> ans;
198+
dfs(0, t, nums, ans);
199+
return ans;
200+
}
201+
202+
void dfs(int u, vector<int>& t, vector<int>& nums, vector<vector<int>>& ans) {
203+
if (u == nums.size())
204+
{
205+
ans.push_back(t);
206+
return;
207+
}
208+
t.push_back(nums[u]);
209+
dfs(u + 1, t, nums, ans);
210+
t.pop_back();
211+
dfs(u + 1, t, nums, ans);
212+
}
213+
};
214+
```
215+
216+
### **Go**
217+
218+
```go
219+
func subsets(nums []int) [][]int {
220+
var ans [][]int
221+
var dfs func(u int, t []int)
222+
dfs = func(u int, t []int) {
223+
if u == len(nums) {
224+
cp := make([]int, len(t))
225+
copy(cp, t)
226+
ans = append(ans, cp)
227+
return
228+
}
229+
t = append(t, nums[u])
230+
dfs(u+1, t)
231+
t = t[:len(t)-1]
232+
dfs(u+1, t)
233+
234+
}
235+
var t []int
236+
dfs(0, t)
237+
return ans
238+
}
239+
```
240+
156241
### **...**
157242

158243
```

lcci/08.04.Power Set/Solution.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> subsets(vector<int>& nums) {
4+
vector<int> t;
5+
vector<vector<int>> ans;
6+
dfs(0, t, nums, ans);
7+
return ans;
8+
}
9+
10+
void dfs(int u, vector<int>& t, vector<int>& nums, vector<vector<int>>& ans) {
11+
if (u == nums.size())
12+
{
13+
ans.push_back(t);
14+
return;
15+
}
16+
t.push_back(nums[u]);
17+
dfs(u + 1, t, nums, ans);
18+
t.pop_back();
19+
dfs(u + 1, t, nums, ans);
20+
}
21+
};

lcci/08.04.Power Set/Solution.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func subsets(nums []int) [][]int {
2+
var ans [][]int
3+
var dfs func(u int, t []int)
4+
dfs = func(u int, t []int) {
5+
if u == len(nums) {
6+
cp := make([]int, len(t))
7+
copy(cp, t)
8+
ans = append(ans, cp)
9+
return
10+
}
11+
t = append(t, nums[u])
12+
dfs(u+1, t)
13+
t = t[:len(t)-1]
14+
dfs(u+1, t)
15+
16+
}
17+
var t []int
18+
dfs(0, t)
19+
return ans
20+
}

lcci/08.04.Power Set/Solution.java

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
private List<List<Integer>> ans;
3+
private int[] nums;
4+
5+
public List<List<Integer>> subsets(int[] nums) {
6+
ans = new ArrayList<>();
7+
this.nums = nums;
8+
dfs(0, new ArrayList<>());
9+
return ans;
10+
}
11+
12+
private void dfs(int u, List<Integer> t) {
13+
if (u == nums.length) {
14+
ans.add(new ArrayList<>(t));
15+
return;
16+
}
17+
t.add(nums[u]);
18+
dfs(u + 1, t);
19+
t.remove(t.size() - 1);
20+
dfs(u + 1, t);
21+
}
22+
}

lcci/08.04.Power Set/Solution.py

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def subsets(self, nums: List[int]) -> List[List[int]]:
3+
def dfs(u, t):
4+
if u == len(nums):
5+
ans.append(t[:])
6+
return
7+
t.append(nums[u])
8+
dfs(u + 1, t)
9+
t.pop()
10+
dfs(u + 1, t)
11+
12+
ans = []
13+
dfs(0, [])
14+
return ans

0 commit comments

Comments
 (0)