登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】
) ~# L$ H+ I7 `1 s" z; }& f# V2 Q0 @! Q3 M7 d5 H. B
解题思路# v0 R3 r" D: b5 E5 E
签到题,枚举所有组合即可。
! Z( ~' \5 d- p0 w# {1 G" {' i3 Q9 n1 t# C+ F2 [4 q6 e/ Q
代码展示
+ R& r6 E" J$ }6 Z2 E$ ~+ t- G
/ @8 [3 q* R5 Yclass Solution {& @6 H3 @( H$ Z) L% V/ f
public int[] findEvenNumbers(int[] digits) {4 V0 p& A6 _+ i d
Set<Integer> result = new HashSet<>();( j/ c n- F6 Q
for (int i = 0; i < digits.length; i++) {: c& Z0 B* e% g
for (int j = 0; j < digits.length; j++) {
B- ]$ S( v' R3 o& t for (int k = 0; k < digits.length; k++) {# Z4 v, g6 A1 d. Y: w* F
if (i == j || j == k || i == k) {
4 t/ z/ }; J& Z C. I continue;& V: \8 @3 M; d( c/ d; h2 M
} G% f. S/ t5 p3 Z
if (digits[i] != 0 && digits[k] % 2 == 0) {
7 B0 T% a: L* P/ q F1 c, A6 W result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);
5 _" O* |5 e; _% P/ P }+ b+ J) t+ i. h3 L
}' L1 I* P, U" D9 Q
}/ F5 x1 X! ~: L: |, F% n0 c3 N
}8 Y* R7 _. u8 [! ]3 J
int[] arr = result.stream().mapToInt(i -> i).toArray();
; K8 G: r/ Q) P% H6 |/ S2 C Arrays.sort(arr);+ L% s) s" y4 E. F! B
return arr;! m" f+ ~5 E6 q5 ~, I: B; L Q
}
8 V/ E& b2 {& G# j9 R5 Q}" q" I: `3 J- V* ]" D# f: R
6 g/ o3 B; }( T1 p6 L8 @5 m5 S/ w
5 g& @' T6 U2 V
【 NO.2 删除链表的中间节点】3 |' ^4 t9 Z- P1 I9 \
; e( \8 s( @. b; v解题思路
5 v0 h2 p9 O$ ^2 Y, q: Q3 D快慢指针的经典题目。
2 n4 K* J6 R; K5 m% X/ r3 [2 K' n: v
代码展示
1 B$ B& `/ u9 r2 Y& x' _; K/ @3 ^9 ^& h' [# {6 H f4 N
class Solution {( i: {" J) C2 c* O( T
public ListNode deleteMiddle(ListNode head) {8 W- C4 K. D$ w
if (head == null || head.next == null) {
; b* V# Q+ D( X$ m+ u return null;) H' d+ W% U. ^0 J1 P
}7 C) c$ q! h) ^( ~3 j! T3 E
ListNode slow = head;
# W- }3 ?) q/ g! d ListNode fast = head.next;
' a6 x+ F# K& f# d; u: U while (fast != null) {
$ E& W8 D3 K! Z$ Z8 n fast = fast.next;
( _+ {+ b6 y( J9 a3 q if (fast != null && fast.next != null) {
( X8 {1 u$ |" Y, G slow = slow.next;! u9 d" p7 |% V* `
fast = fast.next;. P! e8 I. w9 R* [, f. y
}
' @: S, B& z( R' ]- Q3 e }$ O% \5 J7 h. f' F
slow.next = slow.next.next;
1 M+ y- g; [% \9 ^3 m) n" {5 w b+ S return head;
# C: P( {$ x8 n1 N0 q+ n& S8 { }
, d0 Y. K% v1 X6 k+ i4 I}2 k9 }6 N8 m5 a1 h, O
% |. \3 V, e5 F$ s! ]+ n2 _1 b+ L
- `& [' ?9 \3 {! J& _/ f$ u【 NO.3 从二叉树一个节点到另一个节点每一步的方向】
W% [4 s9 X" [3 w y4 F, P0 q9 k9 r5 n, P+ @# C
解题思路
* k, a! L4 w# \; o分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。+ O" ]- x) q! y3 |( S) N
G9 E2 J3 T: U0 c, ~8 p- T' r! j
代码展示
/ W4 R* R. J! E. G7 |# j0 n" o9 B1 f4 Y- W7 n
class Solution {
, C, m2 b8 L, K% z public String getDirections(TreeNode root, int startValue, int destValue) {9 |" P5 V# G; Y6 w, s. A, l# F
StringBuilder start = new StringBuilder();
# v" i# B/ k/ J( l8 ]+ I- o1 T3 |6 A StringBuilder dest = new StringBuilder();
' C* ]# x2 }3 G" f" V4 x$ }; N getDirections(root, startValue, start);
D; j8 O& H$ L) z getDirections(root, destValue, dest);
! n! ~8 Z$ ^5 M int common = 0;8 h8 n# ^5 S; k" l. W- V# y% |* } c
while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {& O: ^" f8 U4 H+ d/ C3 E
common++;
9 Z9 E9 W. p- ]$ q* H }
' @8 j6 o5 B3 O if (common > 0) {
7 f3 U0 I# O5 g3 R, q start.delete(0, common);
( o% U+ }9 c. ]( B" K6 k dest.delete(0, common);! y$ R& x& o2 f1 ?3 S7 D0 ?% E3 L
}% \/ B8 t4 M- I$ A G" [7 h
for (int i = 0; i < start.length(); i++) {' C/ Y% K; J6 E
start.setCharAt(i, 'U');! ^6 A7 S$ N% d$ P# ~
}
# e/ `6 \( ~ @( Z! w4 I' Z& D return start.append(dest).toString();+ S. M8 J# C( u, h5 M% `; D
}; S0 R/ A+ y# w3 h% D
. K, D- U; L: q, g
private boolean getDirections(TreeNode root, int value, StringBuilder sb) {% O p; l4 z8 a
if (root == null) {0 w) S7 y2 g; I! P% D$ e
return false;
1 a0 c9 K" u. } H, H }; o& \0 t$ t. ]+ k5 E
if (root.val == value) {5 L# g8 g' o( {6 m
return true;1 L9 b3 Y5 X2 A) |: k% ~
}4 w( Q9 ^0 n8 U: W. p- E
int len = sb.length();7 |6 f& I1 ^1 E
sb.append('L');3 `: R9 p& C& f8 W8 b
if (getDirections(root.left, value, sb)) {
* O* ^1 i+ ~ W2 j2 h" f$ X return true;9 R* m' e) H% c% }# Z7 L
}
/ L: Y# }: [ M' |' L3 u7 x sb.delete(len, sb.length());+ L& `/ f; T' g& g, ~% {
sb.append('R');
* p, s Q* s3 O9 y6 c return getDirections(root.right, value, sb);
d4 X' }- g& y9 G) C! S# s }
, r I8 L) M, L& k) u) W}: I* G: N2 I. @4 ]
) |) \: ?; V% X4 j! L0 t
6 i O( Y8 C6 I3 b2 c" j【 NO.4 合法重新排列数对】5 H) E9 N- S' z$ P' f0 I. r
" ^' K, \+ j+ w解题思路
, J" |+ C/ u0 w6 i有向图求欧拉路径的模板题。9 m; U/ T/ S4 \8 p2 n
0 c( P$ j' m1 W8 d代码展示
& o6 Y7 F+ {; d( g& X9 K( B) {
+ k' L1 I. W4 y8 i# A7 B% kclass Solution {9 \# q/ }. C5 \, q" w
public int[][] validArrangement(int[][] pairs) {4 k+ s8 K& y. E0 Z, s& x/ n1 v( y, D
Map<Integer, LinkedList<Integer>> graph = new HashMap<>();5 K8 j9 v1 t& I3 a2 p
Map<Integer, Integer> degree = new HashMap<>();+ F; G8 J/ ]6 i+ P. e3 C; H r8 `
for (var p : pairs) {- k9 T# D. c" I( x' f5 _
if (!graph.containsKey(p[0])) {
9 Q4 |& H2 [- L/ f- W graph.put(p[0], new LinkedList<>());" I! }* o: R/ b# J, }# S' z
}3 O1 `) s1 o+ E6 x7 m# H
graph.get(p[0]).add(p[1]);' M+ s+ Y4 l! e5 k/ S$ [
degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);, B0 e1 y c8 k4 d/ T- ?
degree.put(p[1], degree.getOrDefault(p[1], 0) + 1); Y) v% [" D7 j- u
}' F# _3 L6 ]' X% S% {5 q: G# N
List<int[]> result = new ArrayList<>();
5 V- g { B3 F) B9 l- I for (var e : degree.entrySet()) {
9 N) \; n2 O, J; V if (e.getValue() < 0) {9 D3 L' Q& U- T5 ^) J* Y8 ~
dfs(e.getKey(), result, graph);( r* @" {3 n4 r2 V( J2 g$ M% n
}3 O! ~, V8 Y( F. m
}; e8 l: I( j' s4 }% ?/ s
if (result.isEmpty()) {+ J$ @; _, Q _! \3 A. S1 h
dfs(pairs[0][0], result, graph);
$ G' ] C6 T7 R: Q }
6 [6 i8 y: L# i5 ? int[][] arr = new int[result.size()][];
& N t v6 a* V9 y) w7 I+ r. N0 S3 B for (int i = 0; i < result.size(); i++) {, ] O! v1 S; c/ w" \) V
arr[i] = result.get(result.size() - i - 1);
( n$ [* k/ X$ e6 Y8 J8 S, g/ B }0 j6 y) n$ D' { b2 G' Q1 r
return arr;: q# F, z3 C# i3 Q/ `5 R' h3 r. m
}
! m. O) R/ t% R' |1 z" r) W$ A4 ]: Z9 `& i l" o3 ?$ \
private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {
0 P" s$ P$ ^/ ?9 ?1 s# u L' P var next = graph.get(start);. \) b! r6 P# k/ J! L
while (next != null && !next.isEmpty()) { U) u2 J G/ \' d( j7 P
int to = next.poll();8 ~8 w5 x- {& `+ C
dfs(to, result, graph);
/ G* U8 n/ G# B" G; c- f result.add(new int[]{start, to});
% A9 j+ I* @$ m G5 x% I% g }
~7 [: K5 P7 u8 t! q }6 r- G8 m! {/ n2 Z- o% B6 q
} |