登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】+ b; A# F4 X. Q+ h# u. m) u
|$ V- }7 O/ _& P @9 m" F解题思路 \6 W" m3 k U+ z1 H, T# Z
签到题,枚举所有组合即可。% P% r% v7 u, ^1 |/ }% _ o
+ S8 X/ \; C! C" o3 M
代码展示9 s: |4 U* W+ ~4 }' E+ ^
% i8 s9 T" O& U' x! G0 G
class Solution {
9 N+ v4 e# U% _) A& [6 j public int[] findEvenNumbers(int[] digits) {
1 j! B7 I' J; R$ C& m( H% i8 W8 Y# _ Set<Integer> result = new HashSet<>();, M2 Y6 { Q4 X6 T; c' Y) @
for (int i = 0; i < digits.length; i++) {' [ x, {( [& c( u
for (int j = 0; j < digits.length; j++) {3 v9 H4 A* K% w/ U3 v, l$ r& L7 `
for (int k = 0; k < digits.length; k++) {* ~3 H& a( U' J: y. E
if (i == j || j == k || i == k) {1 A0 S6 C+ f: ?$ r, E
continue;1 J8 t" D/ C4 o- P& b& }! L
}
2 P5 u; V( s7 J& R! l0 x! A; U if (digits[i] != 0 && digits[k] % 2 == 0) {
; y7 b8 X0 I, z) f! B1 e1 F result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);
, x4 q" ~# C' F }
& ?# P* \9 H% a- f2 N8 z }1 l6 |9 y, |6 I! c( h( ^
}
% g/ H: K- I6 s3 ^4 q$ c8 e- X/ r }9 H% f. r* X# o- Q% R
int[] arr = result.stream().mapToInt(i -> i).toArray();
) o9 m' v% F/ ?9 }: i# A. g Arrays.sort(arr);
' i& [& ^% _$ u. z0 K9 x. m. B return arr;6 Z# H M+ ?/ u& o- M! t- q
}+ r ^0 v4 f) Y- T
}$ z# b8 k$ m8 s& W
/ `" I" B, d7 t0 a8 T* }" o
5 W& E4 m. i- c! D8 @) }0 U \【 NO.2 删除链表的中间节点】
% J& J- @9 x; D- u+ x5 n* B3 b9 E/ k$ `) e+ ~
解题思路
1 E2 J/ _! `) f: Z快慢指针的经典题目。3 e' m: Z# } F) i9 z" X
$ Y0 {4 @' q" ]! K代码展示 |' B7 a+ s* R) W# H3 P3 J+ e
1 k/ t2 u/ J( I+ q" Pclass Solution {) h/ R% F: A# ~1 l6 X
public ListNode deleteMiddle(ListNode head) {' M! U6 d, l9 C' H Z/ S5 K* v- i
if (head == null || head.next == null) {: j/ a9 u/ s6 u( y
return null;5 `4 W7 c. j1 e b1 D& O& n( l
}
. q9 q, p, W9 u( D) b ListNode slow = head;/ T* l- r& y5 ] L% z
ListNode fast = head.next;
/ n* o2 o0 S; m2 I O6 @8 O while (fast != null) {
F) ]* P5 [' Q! J4 r, T2 f X* F: ` fast = fast.next;
7 x. R: I: E) N0 G6 ~$ Q if (fast != null && fast.next != null) {7 i z4 |$ K" }
slow = slow.next;1 t, Q6 c0 [6 N8 r3 {
fast = fast.next;
5 ]) n$ W" D4 K9 k4 j }
5 y: N1 q$ Y3 w/ V }% d1 V( \' }$ g* F3 `" C, m
slow.next = slow.next.next;
6 p- Y8 f G7 t# l return head;
) X* u4 i6 `: H6 N }: Y5 m. H8 N& s+ X. Q
}- @) f% O6 M E! w9 r
# i. A: z5 h6 F: p1 t) }! o7 w0 @. E/ B0 \
【 NO.3 从二叉树一个节点到另一个节点每一步的方向】
! w+ F7 c7 l( P* _3 g: Q
, }6 N& H1 }1 Z6 Q: x解题思路; E: X% H$ ^0 k% t$ i w
分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。
% D7 b- y/ e" ]% h! v2 f2 S( e8 i2 ~+ ^+ R/ q3 w; ~& [4 B% [
代码展示
# c7 |/ n8 p2 m$ _3 {$ w5 v9 Y2 q! q6 j$ x7 |; x9 X1 Y
class Solution {8 F/ P& i7 {2 O
public String getDirections(TreeNode root, int startValue, int destValue) {
& {- u$ H: c, d* O StringBuilder start = new StringBuilder();
) d" c7 a H/ O; W# p StringBuilder dest = new StringBuilder();& n, B5 Y2 E& |
getDirections(root, startValue, start);& C- P/ |+ e: @ p
getDirections(root, destValue, dest);) H4 g4 e" ~. D1 _6 V1 T
int common = 0;
5 H: T( K: U' O/ p4 D while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {
9 }9 W5 ]" _5 b! E' F9 E/ A; ^+ K common++;
* Q+ S/ w. n( e1 R1 y" h- N* \/ } }
( k% Q: _3 V, x if (common > 0) {( R6 w$ V7 Y/ |5 U7 m$ A
start.delete(0, common);! s$ d: `0 u, g
dest.delete(0, common);
3 Q; q, V8 x* ~" J: V }
+ Z6 Q) B% J7 m for (int i = 0; i < start.length(); i++) {
- w0 _5 e1 A% n8 c% T6 {% i start.setCharAt(i, 'U');
+ f/ ^, l. f3 k) v }
4 @" L" F% G6 J: S( q5 n. l% X return start.append(dest).toString();
+ O( `6 C/ M( j& R- a7 ? }
7 s. h0 d1 p3 O( d& o: g
2 r m8 G/ M/ L9 S. I private boolean getDirections(TreeNode root, int value, StringBuilder sb) {
5 Y1 v: { n4 }! ^ if (root == null) {
P: q3 V, \ V4 M* K return false;
% z1 F+ l& a/ K: F }
* f8 B4 V; t: | J if (root.val == value) {
# T' W! U% C5 h- B! x& M Q$ x0 `% e return true;# ?1 D, [) R% w( N2 c: J- j' D
}
& \" R5 Z, ^& D; [3 I5 H" o int len = sb.length();' T# O. w. }- n3 W" A" ^# l
sb.append('L');; M+ R( ?2 z q7 c! G: ^$ h
if (getDirections(root.left, value, sb)) {
3 l1 X# ^% i$ d9 X return true;$ H8 @. Q, n6 L6 }
}! {2 Y5 q/ S8 U+ v! f
sb.delete(len, sb.length());$ k2 y* l* \6 k, ?4 n" V$ D+ B2 P
sb.append('R');2 l' D; N: N* `2 a) W% }
return getDirections(root.right, value, sb);
! ~) A- R j& B2 s }
# ~2 m+ u% b% N* s2 U: A}% w; i8 Q5 {4 x: P5 U1 S( N( J
% P0 \' H# y3 M
8 v0 d2 o; C3 N2 b0 F+ X【 NO.4 合法重新排列数对】. C) s3 l9 O7 m+ q3 R% F1 @
! s1 {: F e& p8 s7 `) r& {
解题思路; E) e2 O8 }# D
有向图求欧拉路径的模板题。
: v) G! L$ v8 B9 X9 y
( }! `. [. X' K0 T! R7 ?. J代码展示
1 t2 p" [3 `4 A6 I2 B2 P* l; v1 B3 _$ z# z9 N+ b
class Solution {
$ z/ T! a) M+ F5 x* {6 \( {2 }% v public int[][] validArrangement(int[][] pairs) {0 @) ` x2 Y, b
Map<Integer, LinkedList<Integer>> graph = new HashMap<>();
' e8 D4 \. S2 J) y) s% F4 {5 V Map<Integer, Integer> degree = new HashMap<>();4 _/ @$ @' u3 e4 k2 T
for (var p : pairs) {
; k# H0 T3 [9 X8 }! `6 L' H if (!graph.containsKey(p[0])) {
3 n# T5 Q/ [8 H: S8 c- O6 i graph.put(p[0], new LinkedList<>());$ Z/ R. o/ ?- n4 {8 H- g
}
2 k' L- \+ v2 Y7 X% ? a- A# m graph.get(p[0]).add(p[1]);; F" s! V m/ T% S. g$ b
degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);! ^$ `) m) u# n2 q/ k% r9 M
degree.put(p[1], degree.getOrDefault(p[1], 0) + 1);) D2 R8 K; _0 T3 N( ^+ p
}" c. N+ _& F/ ~1 w
List<int[]> result = new ArrayList<>();3 i& [9 v% \+ P5 i' H
for (var e : degree.entrySet()) {
" `7 c2 |" D. T. B& y9 V/ p; { if (e.getValue() < 0) {
?! w$ e; i& R% u dfs(e.getKey(), result, graph);, Z; ~; z" f w4 e: u2 |% D5 X
}
: B$ V3 b* T! S" R; B& U; ~ }9 u& X9 X4 b6 e' V
if (result.isEmpty()) {
( H& b2 k" B6 L3 I. r& X dfs(pairs[0][0], result, graph);
, _: n. `6 n+ w2 O }0 w7 `/ q! \; ]! O# M9 `" F; p
int[][] arr = new int[result.size()][];
! \) E: T. L: ~9 z for (int i = 0; i < result.size(); i++) {# X5 m' S- k$ K. _7 J, ~
arr[i] = result.get(result.size() - i - 1);7 p+ E4 s! z3 O6 B0 V. B# ?
}
7 ~$ K3 l0 P$ ^) p7 h, b* }4 ` return arr;
/ e, A" k' d6 r$ M1 R } K' ?3 a. {* [9 b& B9 |
6 \( g" R- H ~4 ~9 A3 i- Z private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {* t4 U! g: b T% @
var next = graph.get(start);* v" @ C. M0 `" n1 J) u
while (next != null && !next.isEmpty()) {
- a$ f8 Q% U5 x3 P" [ int to = next.poll();7 [2 \1 Q2 B8 Z# ^4 z6 P% T
dfs(to, result, graph);
7 M+ T6 U E. k5 W: b result.add(new int[]{start, to});
2 J; T0 e2 i7 V8 M! w! Z5 X1 j }7 s7 J% t0 Z4 b+ h! G
}
9 @$ q# @1 k1 U% ?1 n} |