Skip to content

Commit 14c8085

Browse files
authored
feat: add solutions to lcp problem: No.80 (#2860)
LCP 80.生物进化录
1 parent df9bd5d commit 14c8085

File tree

5 files changed

+186
-0
lines changed

5 files changed

+186
-0
lines changed

lcp/LCP 80. 生物进化录/README.md

+106
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,110 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcp/LCP%2080.%20%E7%94%9F%
5454

5555
<!-- solution:start -->
5656

57+
### 方法一:DFS
58+
59+
<!-- tabs:start -->
60+
61+
#### Python3
62+
63+
```python
64+
class Solution:
65+
def evolutionaryRecord(self, parents: List[int]) -> str:
66+
def dfs(i: int) -> str:
67+
t = sorted(dfs(j) for j in g[i])
68+
return "0" + "".join(t) + "1"
69+
70+
n = len(parents)
71+
g = [[] for _ in range(n)]
72+
for i in range(1, n):
73+
g[parents[i]].append(i)
74+
return dfs(0)[1:].rstrip("1")
75+
```
76+
77+
#### Java
78+
79+
```java
80+
class Solution {
81+
private List<Integer>[] g;
82+
83+
public String evolutionaryRecord(int[] parents) {
84+
int n = parents.length;
85+
g = new List[n];
86+
Arrays.setAll(g, k -> new ArrayList<>());
87+
for (int i = 1; i < n; ++i) {
88+
g[parents[i]].add(i);
89+
}
90+
return dfs(0).substring(1).replaceAll("1+$", "");
91+
}
92+
93+
private String dfs(int i) {
94+
List<String> t = new ArrayList<>();
95+
for (int j : g[i]) {
96+
t.add(dfs(j));
97+
}
98+
Collections.sort(t);
99+
return "0" + String.join("", t) + "1";
100+
}
101+
}
102+
```
103+
104+
#### C++
105+
106+
```cpp
107+
class Solution {
108+
public:
109+
string evolutionaryRecord(vector<int>& parents) {
110+
int n = parents.size();
111+
vector<vector<int>> g(n);
112+
for (int i = 1; i < n; ++i) {
113+
g[parents[i]].push_back(i);
114+
}
115+
116+
function<string(int)> dfs = [&](int i) -> string {
117+
vector<string> t;
118+
for (int j : g[i]) {
119+
t.push_back(dfs(j));
120+
}
121+
sort(t.begin(), t.end());
122+
string res = "0";
123+
for (const string& s : t) {
124+
res += s;
125+
}
126+
res += "1";
127+
return res;
128+
};
129+
130+
string ans = dfs(0);
131+
return ans.substr(1, ans.find_last_not_of('1'));
132+
}
133+
};
134+
```
135+
136+
#### Go
137+
138+
```go
139+
func evolutionaryRecord(parents []int) string {
140+
n := len(parents)
141+
g := make([][]int, n)
142+
for i := 1; i < n; i++ {
143+
g[parents[i]] = append(g[parents[i]], i)
144+
}
145+
146+
var dfs func(int) string
147+
dfs = func(i int) string {
148+
var t []string
149+
for _, j := range g[i] {
150+
t = append(t, dfs(j))
151+
}
152+
sort.Strings(t)
153+
return "0" + strings.Join(t, "") + "1"
154+
}
155+
156+
ans := dfs(0)[1:]
157+
return strings.TrimRight(ans, "1")
158+
}
159+
```
160+
161+
<!-- tabs:end -->
162+
57163
<!-- problem:end -->
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution {
2+
public:
3+
string evolutionaryRecord(vector<int>& parents) {
4+
int n = parents.size();
5+
vector<vector<int>> g(n);
6+
for (int i = 1; i < n; ++i) {
7+
g[parents[i]].push_back(i);
8+
}
9+
10+
function<string(int)> dfs = [&](int i) -> string {
11+
vector<string> t;
12+
for (int j : g[i]) {
13+
t.push_back(dfs(j));
14+
}
15+
sort(t.begin(), t.end());
16+
string res = "0";
17+
for (const string& s : t) {
18+
res += s;
19+
}
20+
res += "1";
21+
return res;
22+
};
23+
24+
string ans = dfs(0);
25+
return ans.substr(1, ans.find_last_not_of('1'));
26+
}
27+
};
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func evolutionaryRecord(parents []int) string {
2+
n := len(parents)
3+
g := make([][]int, n)
4+
for i := 1; i < n; i++ {
5+
g[parents[i]] = append(g[parents[i]], i)
6+
}
7+
8+
var dfs func(int) string
9+
dfs = func(i int) string {
10+
var t []string
11+
for _, j := range g[i] {
12+
t = append(t, dfs(j))
13+
}
14+
sort.Strings(t)
15+
return "0" + strings.Join(t, "") + "1"
16+
}
17+
18+
ans := dfs(0)[1:]
19+
return strings.TrimRight(ans, "1")
20+
}
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
private List<Integer>[] g;
3+
4+
public String evolutionaryRecord(int[] parents) {
5+
int n = parents.length;
6+
g = new List[n];
7+
Arrays.setAll(g, k -> new ArrayList<>());
8+
for (int i = 1; i < n; ++i) {
9+
g[parents[i]].add(i);
10+
}
11+
return dfs(0).substring(1).replaceAll("1+$", "");
12+
}
13+
14+
private String dfs(int i) {
15+
List<String> t = new ArrayList<>();
16+
for (int j : g[i]) {
17+
t.add(dfs(j));
18+
}
19+
Collections.sort(t);
20+
return "0" + String.join("", t) + "1";
21+
}
22+
}
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def evolutionaryRecord(self, parents: List[int]) -> str:
3+
def dfs(i: int) -> str:
4+
t = sorted(dfs(j) for j in g[i])
5+
return "0" + "".join(t) + "1"
6+
7+
n = len(parents)
8+
g = [[] for _ in range(n)]
9+
for i in range(1, n):
10+
g[parents[i]].append(i)
11+
return dfs(0)[1:].rstrip("1")

0 commit comments

Comments
 (0)