登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】
D3 \& D. V0 D( u- Z" n6 I, w* @9 F, L# Z: V, C7 r
解题思路
: x9 M, U0 I& D2 d签到题,枚举所有组合即可。
6 C n7 b: V5 o
5 ]$ |4 H9 ^, ?/ A t代码展示
8 Q' F0 D- g8 V7 z, T, p; G, c) f( [# v6 n, A& H e+ {4 i
class Solution {
0 x4 Q4 n% c7 c( D0 g# N public int[] findEvenNumbers(int[] digits) {
% l/ I' v5 R, r6 b5 u Set<Integer> result = new HashSet<>();0 d/ n3 I; X9 g/ u# Y- [# G/ i, P
for (int i = 0; i < digits.length; i++) {
! B4 X3 p/ [! N, b for (int j = 0; j < digits.length; j++) {
7 w y6 z5 G" r. r3 P" U for (int k = 0; k < digits.length; k++) {
7 m- d, Q/ _* K% w! T if (i == j || j == k || i == k) {
j$ t/ Z4 }) k, @. b D continue;3 M. k3 s( w+ g: t U) q& Q
}/ M! [& S4 o# N1 N/ F
if (digits[i] != 0 && digits[k] % 2 == 0) {2 W& a1 s- f/ X P0 @
result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);/ Z. ?. W" `+ _5 u- L: L" P/ `
}& x! ]4 K! a2 w. `5 {6 x- k
}
1 C9 k( p6 _$ D& j4 ]: b }7 N1 W9 c4 W& M6 Q* u* t" d
}
1 L9 c9 l- n% e' _- [$ p int[] arr = result.stream().mapToInt(i -> i).toArray();
0 S% D& D# a- q" M: I3 I Arrays.sort(arr);
, w( F/ `0 d0 D# W return arr;( r+ g6 b7 V9 C
}
$ ?1 }0 l9 P1 S9 Q6 f0 d! |}' }$ A9 M0 H l' T
3 j' O; ~! I5 Q8 N8 s7 [
' f/ x x7 q! S* } P3 O g8 j【 NO.2 删除链表的中间节点】
* f( K1 w4 `6 }# E k6 ]0 ?# l7 G9 L" |; Z6 y+ @; _: `( t
解题思路
9 h; c4 M: n9 A8 K1 i3 T; Q快慢指针的经典题目。
, f- M& D- [9 F# d! V/ N5 L+ d8 [6 Y- _
代码展示
& U& j( p. [- K0 ^' y4 D
. f& W' J9 }# I! u/ J/ R$ v5 Jclass Solution {
- V/ w8 t# y9 d+ | T/ P9 ]4 [0 W: l public ListNode deleteMiddle(ListNode head) {( ?- q$ {) M3 d& c# b
if (head == null || head.next == null) {
; p- }8 Q! h" X) J" E; _4 ?2 N& f return null;' _% |' e$ Z8 S4 P
}0 ^( d g& V; N
ListNode slow = head;
+ J) b/ ^# `( D ListNode fast = head.next;
' \6 l& Z& H, m: Q while (fast != null) {3 i% n/ |. E( S$ O% h, e5 H# D
fast = fast.next;4 f- y9 f: |9 E' b) L
if (fast != null && fast.next != null) {. N: s) G1 c" }8 p# H
slow = slow.next;+ u, n% a% D, }( ` f+ s* G' ^
fast = fast.next;
3 p- J" V; H/ I% n* V, L }- n1 p0 c. _+ M+ i/ H4 V
}( x [5 I) s9 c* L: i, [. R, Y
slow.next = slow.next.next;# t* ]+ E2 E2 _) I, ?5 B+ h
return head;- N E8 M# F! l6 C, ]
}
E C. {/ [" L}
$ J) A# B4 V3 U& ~6 q
D" |9 W5 ], q }* x) S
: L, z7 w I+ N1 ~【 NO.3 从二叉树一个节点到另一个节点每一步的方向】; p v2 N* _2 w8 b
& B1 y9 }3 ^/ r; k8 {) k) b% c8 o
解题思路: y5 S6 A* ~8 k. @8 v( J
分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。
( L8 a( @# I" ~$ h
/ A2 r- Y. x8 O, m# v代码展示
- ?! Y! {5 g8 m7 ]. w2 ?7 j9 X9 n
, m) ^( ^- M9 c& q+ |6 q7 kclass Solution { C& P3 w$ ?6 J+ v" s: F$ l
public String getDirections(TreeNode root, int startValue, int destValue) {
2 {; W& ?/ h' m StringBuilder start = new StringBuilder();* u8 M, V [% G2 A; v
StringBuilder dest = new StringBuilder();
$ ^- H/ U+ c+ @$ o getDirections(root, startValue, start);
5 w) x! I$ D% C4 ` getDirections(root, destValue, dest);
! k% F# k. N0 i- {( w- @ int common = 0;$ m# K0 g, U/ U0 L
while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {
; _3 y6 p* p' t+ s! E common++;
7 q% i7 E b9 I4 R& [9 f }
; Z% q2 e+ ?$ l4 E8 a0 X v5 i( _ if (common > 0) {
; |+ v1 X j6 G, ^; c start.delete(0, common);
. T/ a& q) P# o8 }0 x1 b dest.delete(0, common);$ {5 V2 i9 f9 z; z' ] g0 S/ f
}
' E$ `' s( Y4 M4 {3 N" ~) c$ E# D for (int i = 0; i < start.length(); i++) {
- O* b- ~& R+ i, |# d9 G/ h start.setCharAt(i, 'U');, r4 Z1 \3 i1 n- J R
}& K F6 K, y/ z! M/ g1 {7 z
return start.append(dest).toString();
9 I$ G9 s; _7 V' z2 q' ` }
: s# u; o3 T) }
2 O' _8 V6 Z+ s1 f2 T9 `" { private boolean getDirections(TreeNode root, int value, StringBuilder sb) {
8 T8 h- H0 O, `2 b; p0 H if (root == null) {
) C2 y# l: z* Z" @6 r6 f u8 t& x return false;
0 W- G( i7 y0 p1 r8 z% _ }& h* |" B3 a# P, W p/ |5 U
if (root.val == value) {5 e) L# n! m) k/ e9 ?1 o* m+ L3 q
return true;' J' J: h/ L# ~3 B% \& Y& ?6 c& s7 S
}# r7 N* ]7 M) }, R2 X$ ?+ i) Q
int len = sb.length();
. ?+ F- I( W/ ?# R4 l, M0 K) { sb.append('L');
- R9 V8 v) O2 ~ if (getDirections(root.left, value, sb)) {
' |: r, Z' ~/ }% W0 ? return true;
\: K" d/ ^% O) [- Z1 i: Z6 I$ s' ] }
0 ^- i, ^) g3 C$ x% ? sb.delete(len, sb.length());
! D* l& C6 }( w6 _ sb.append('R');
. b7 D% z( y2 D, | return getDirections(root.right, value, sb);
2 Z; _3 v$ n0 Q) Q7 H }; f# U9 K8 R8 t) Z, H) |2 W
}$ l; e* A$ U' {% l+ @
' r6 r3 B& C0 n; E0 x( @
' g0 [2 \" p. h8 c: u0 w+ i }$ \$ X
【 NO.4 合法重新排列数对】5 j+ V1 v+ _& W0 `3 S4 p
- h u% Y7 a8 s解题思路
! g& s3 i2 l* r5 _9 s- N有向图求欧拉路径的模板题。" N$ g) Z6 D0 J5 \, J/ A; i5 w
/ d$ q- s: S4 X7 y
代码展示
, v) r& r; m6 J+ o2 j0 m g$ @& |* ]- A# ?& L0 ?: i
class Solution {# s1 }5 a/ C0 C
public int[][] validArrangement(int[][] pairs) {$ H9 @2 X' [+ m8 F: d: f
Map<Integer, LinkedList<Integer>> graph = new HashMap<>();
5 e0 A: h7 E' q9 ^3 ^! I Map<Integer, Integer> degree = new HashMap<>();
: d8 ^5 X9 g/ ?) q& ~9 v O for (var p : pairs) {
7 q4 S4 N B) J0 r- @ if (!graph.containsKey(p[0])) {
8 x0 W9 F. W, R graph.put(p[0], new LinkedList<>());: o) p& h0 i y" X; ~
}' M- M+ B; s6 _4 S- U8 Q# g
graph.get(p[0]).add(p[1]);( Q4 _" d+ I) R7 Y
degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);
* m6 U. K4 g- `/ @- N+ W2 { degree.put(p[1], degree.getOrDefault(p[1], 0) + 1);
# F1 n$ p5 @$ H4 X" u }
! j# |1 O3 p+ Y8 ~- O# ^ List<int[]> result = new ArrayList<>();
. X" q+ O K( D4 { for (var e : degree.entrySet()) {$ h7 q/ W' k' w4 L
if (e.getValue() < 0) {4 s' E! O# t+ r( M* m( e7 D
dfs(e.getKey(), result, graph);
; b/ t, ?6 j' U }
# J% q* e3 d* Y5 }; W }' K% n1 S- ^# w0 b, a4 \
if (result.isEmpty()) {) u5 _% }. `: F/ X8 c
dfs(pairs[0][0], result, graph);7 e: b S0 h; j! i; _
}
# ^1 i7 x( J/ K0 V$ ^3 L1 c* N int[][] arr = new int[result.size()][];
7 M) ~& q! C6 L2 p$ r$ ^7 r for (int i = 0; i < result.size(); i++) {" l( b/ M& D) M# E. _
arr[i] = result.get(result.size() - i - 1);
( i2 ~8 Y& [- Z+ b }: w, a9 T7 Q- ?- T# r+ \" h
return arr;$ s; q6 Y2 Z- [ x! y7 M$ z3 q
}
, c) \( O! l% x7 s
. L% m; q& K, d$ e( ?+ `9 n private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {: r% B+ V6 M% [, r" [$ n j, J
var next = graph.get(start);
8 e7 q8 y3 i9 g, Y5 O L while (next != null && !next.isEmpty()) {+ w* O1 k; B" p$ w
int to = next.poll();
$ g& A R, @9 H! ~ dfs(to, result, graph);# q6 F* W( S' H* u, |. P
result.add(new int[]{start, to});
( P7 \7 I; y' ?8 Y9 i- p. w }7 n a2 u8 z4 i6 E; J: h
}$ A) ?0 u0 d q% ^8 f! X. ^3 o
} |