diff --git a/problems/1971.寻找图中是否存在路径.md b/problems/1971.寻找图中是否存在路径.md
index 132b0181..89a2a1fe 100644
--- a/problems/1971.寻找图中是否存在路径.md
+++ b/problems/1971.寻找图中是否存在路径.md
@@ -284,6 +284,48 @@ var validPath = function(n, edges, source, destination) {
};
```
+### Go
+
+```go
+func validPath(n int, edges [][]int, source int, destination int) bool {
+ n = 200005
+ father := make([]int, n)
+ // 并查集初始化
+ for i := 0; i < n; i++ {
+ father[i] = i
+ }
+
+ var find func(u int) int // 并查集里寻根的过程
+ find = func(u int) int {
+ // 如果根就是自己,直接返回
+ // 如果根不是自己,就根据数组下标一层一层向下找
+ if u == father[u] {
+ return u
+ }
+ return find(father[u])
+ }
+
+ var join func(u, v int) // 将 v->u 这条边加入并查集
+ join = func(u, v int) {
+ u = find(u)
+ v = find(v)
+ if u == v {
+ return
+ }
+ father[v] = u
+ }
+
+ for i := 0; i < len(edges); i++ {
+ join(edges[i][0], edges[i][1])
+ }
+
+ source = find(source)
+ destination = find(destination)
+ return source == destination
+}
+
+```
+
diff --git a/problems/kama54.替换数字.md b/problems/kama54.替换数字.md
index f03e575d..7dc22c0a 100644
--- a/problems/kama54.替换数字.md
+++ b/problems/kama54.替换数字.md
@@ -142,7 +142,7 @@ for (int i = 0; i < a.size(); i++) {
### C:
### Java:
-
+解法一
```java
import java.util.Scanner;
@@ -160,6 +160,42 @@ class Main {
}
}
```
+解法二
+```java
+// 为了还原题目本意,先把原数组复制到扩展长度后的新数组,然后不再使用原数组、原地对新数组进行操作。
+import java.util.*;
+
+public class Main {
+ public static void main(String[] args) {
+ Scanner sc = new Scanner(System.in);
+ String s = sc.next();
+ int len = s.length();
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) >= 0 && s.charAt(i) <= '9') {
+ len += 5;
+ }
+ }
+
+ char[] ret = new char[len];
+ for (int i = 0; i < s.length(); i++) {
+ ret[i] = s.charAt(i);
+ }
+ for (int i = s.length() - 1, j = len - 1; i >= 0; i--) {
+ if ('0' <= ret[i] && ret[i] <= '9') {
+ ret[j--] = 'r';
+ ret[j--] = 'e';
+ ret[j--] = 'b';
+ ret[j--] = 'm';
+ ret[j--] = 'u';
+ ret[j--] = 'n';
+ } else {
+ ret[j--] = ret[i];
+ }
+ }
+ System.out.println(ret);
+ }
+}
+```
### Go:
````go