登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】
, \9 \ v; ^% B' D& Q0 U% S+ U7 x1 y
解题思路9 v. p# ?' {, n+ ~: i$ |
签到题,枚举所有组合即可。
" V$ B6 [. }) F6 U9 H
# y% G( r& h% t- j/ @- X0 m5 i+ E代码展示
' I0 @) k3 r H/ E# p7 s* h6 F
- Q* i/ v) r% T' o. K( r' Aclass Solution {
& ? r( M: K. b3 t7 S5 {8 V" S6 K6 I public int[] findEvenNumbers(int[] digits) {; n+ M* x8 z I& R& P& R+ C
Set<Integer> result = new HashSet<>();( t) p7 j8 T; q/ M
for (int i = 0; i < digits.length; i++) {0 L F9 @5 ?/ _/ u7 `
for (int j = 0; j < digits.length; j++) {. W! X4 n& c- D+ V0 @, e
for (int k = 0; k < digits.length; k++) {/ I5 L/ p s" m8 R' k) v1 \ C5 @
if (i == j || j == k || i == k) {
. J8 ]4 ^5 L& M! a continue;9 c6 w" W! E3 C
}
/ K: \5 k$ x0 H! d/ S' W* e" g9 c( e if (digits[i] != 0 && digits[k] % 2 == 0) {
7 A( r8 H& e- v( h' r result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);
. T" F3 j+ ^2 y1 P$ k: ^" N }
2 u* F2 o7 o+ \0 } }
" f' w7 R2 H* G- n( P' z% O }
" A4 N( u I( `2 V; w6 K0 j+ t" S8 H, x }
0 l; B1 b7 q( n2 i- W int[] arr = result.stream().mapToInt(i -> i).toArray();7 _8 V2 ~! t$ G: z$ B* n
Arrays.sort(arr); G( W J u. n
return arr;
4 e2 c5 U' _! X/ Q7 @6 V2 l; A# K6 \ }
8 i. W; Q; X/ L6 J}
4 i6 f9 Q" G a! x# V! z
. ?4 w5 F* i0 r3 t- S! A/ X+ t4 d5 K6 p
【 NO.2 删除链表的中间节点】
( I& e P, Y; h6 g: X: r1 l
( }6 ~ _3 a) y9 p7 E" \; v2 y5 }解题思路$ L$ S; e! x. g6 {+ F- |. S& a
快慢指针的经典题目。9 i8 g3 |7 T" A ?) _
! c7 T- v* M/ ~$ E; r9 i代码展示
. d: b: X7 t6 `/ d% {; v1 D
( e/ E. @' g8 ?) O" o0 Qclass Solution {
( T$ s1 S+ r& P# k. S8 t8 Z4 W public ListNode deleteMiddle(ListNode head) {* j0 @. [5 ?' M) q
if (head == null || head.next == null) {
( \6 O$ X7 m+ D, ~# }5 } return null;
- b, f% g- q4 J2 f }
' d' J* T1 ]! t8 C; J/ W- q5 ~/ S ListNode slow = head;. Z" Y5 i6 [( m. @- n
ListNode fast = head.next;
! F0 x I; V5 ?, c while (fast != null) {& ]8 t0 i! j7 |" ]4 A7 u
fast = fast.next;
) l+ ?9 w3 J8 G1 D2 p* u if (fast != null && fast.next != null) {
8 t \7 E; U( _5 l: y0 y9 U2 ~1 `! N% y slow = slow.next;
; i1 d- V4 F( i7 a/ r# Q# C8 F fast = fast.next;
/ [$ n, S, j3 }4 V/ H }
+ B0 J+ H* U- b" m% R }
5 A9 ?8 E: y" H3 o' Y( H3 H" w slow.next = slow.next.next;6 l/ \4 B. Z) l4 X; _9 x
return head;
; F+ t$ ~+ Z) m2 m1 E }: x1 A6 o# o+ {. Q& Z
}
. d) G |8 o( C$ f) V
3 P E/ A* v/ i0 E8 [) g: Z' S w( E, V4 m# \5 { T* U9 A6 t
【 NO.3 从二叉树一个节点到另一个节点每一步的方向】2 l" `* ?" M" x7 j
( V+ {2 s( I5 c4 a
解题思路
/ S# ?7 X5 B S) T分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。" b4 p* H. `+ Q9 {" T7 e
( n* H- w/ p9 f/ c" p( H% g$ U/ ]代码展示
% u# ?+ u# o! {6 S( Y: j% x; `: r
class Solution {( ~6 \( F4 w* `/ K4 a7 r
public String getDirections(TreeNode root, int startValue, int destValue) {9 V4 t" M2 S( @6 Q i6 z1 N
StringBuilder start = new StringBuilder();* {7 Z- }& @3 a
StringBuilder dest = new StringBuilder();
' G9 p. g1 ^3 W. u7 w3 n2 B getDirections(root, startValue, start);: v# ?0 k( B# g9 U# S f% a' M4 D _
getDirections(root, destValue, dest);% }: C4 g/ W n
int common = 0;
1 E# {& J8 ~9 v" \ while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {
" R3 W5 X$ v1 O2 m5 O$ g6 v# Z common++;) X5 z/ A5 Y5 Y- z1 \8 Y
}: v( \( A( ?) j0 f+ q
if (common > 0) {
$ `3 q" v, m- ?5 v9 z5 h start.delete(0, common);
5 }% y" p1 e$ w- Z& f+ g dest.delete(0, common);4 T r5 u3 q v$ j; j. M2 e
}
n8 Q# a: h8 W5 T* L5 g+ R$ N# J for (int i = 0; i < start.length(); i++) {" W3 D* G+ n9 d
start.setCharAt(i, 'U');$ A: y; h7 j* W. g" k5 } d2 e3 H2 p
}
8 {/ B( l0 J% X9 I) Y return start.append(dest).toString();1 I4 u# q5 b3 u+ v
}2 x- c7 B* q9 @: R
) ~, H$ X) I( A
private boolean getDirections(TreeNode root, int value, StringBuilder sb) {" O- x# ?$ f; X: y: I! E
if (root == null) {; m" R) f/ p# s& f
return false;
. Z% E( B2 W, L }
a8 @: g# S& S if (root.val == value) {
A! m. t- K1 c' _ x( { return true;5 T6 Q; l x6 G) H; z
}
" ^' f$ ? s$ _1 d& J# {5 T$ _ a+ U int len = sb.length();
# T" s* Y3 B& i: P8 F0 {7 S! k sb.append('L');
' A+ A! k1 M4 r& \9 b if (getDirections(root.left, value, sb)) {
b& @- u" Q$ _4 } o$ N1 h- F7 L return true;
$ ^+ x9 |3 O5 J+ ^& y3 {+ S; S4 B }
( J" j+ o$ A+ v7 i m sb.delete(len, sb.length());! ~7 P% w; ]0 |1 h" g
sb.append('R');
6 f! c. f2 u) p- h3 \ return getDirections(root.right, value, sb);
' i9 C; K4 ^" L1 X2 u }! L; L" P3 h3 `8 ^1 J: i4 V9 x) _! `# Y
}0 J, d* V0 e8 Y1 L- S& u
, ~- y S! r- l- {
' f6 U( l% W1 Z- O【 NO.4 合法重新排列数对】
; R# V6 t- o4 Q* m, O& H/ j
* j3 @4 ?+ | Q2 T0 R2 c: x8 G解题思路/ `! G- J; l5 X8 l7 s
有向图求欧拉路径的模板题。# ]% t* n" v' H& H4 w) i
2 j N9 U- Z! E, e# i) x/ l代码展示! @4 w) f0 _+ ]; M0 j/ Z
- b# i- S+ J) P0 _( O8 I
class Solution {6 J' l9 \0 h# i8 t0 @
public int[][] validArrangement(int[][] pairs) {1 r! S) {; ^( v7 f0 C
Map<Integer, LinkedList<Integer>> graph = new HashMap<>();
( b o, m$ N+ r% R5 w Map<Integer, Integer> degree = new HashMap<>();
3 ~& ^( K3 l2 W& x7 u( { for (var p : pairs) {" I* V4 }( ^ L
if (!graph.containsKey(p[0])) {) c5 k5 z5 O' \8 M: ~
graph.put(p[0], new LinkedList<>());: k: W+ N# x4 L+ h) N4 D' t* J
}. N& Z, D' j) ?9 O
graph.get(p[0]).add(p[1]);
% `, _0 E2 T& a& s degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);- A3 X6 O* f' \! _( O9 D+ H
degree.put(p[1], degree.getOrDefault(p[1], 0) + 1);3 a. ~9 M/ ^1 e) B. n, {) { a
}& Q( x! D( C q
List<int[]> result = new ArrayList<>();
$ A3 X5 w6 ~& F- C5 @% s for (var e : degree.entrySet()) {) n3 B" w) m8 p. r
if (e.getValue() < 0) {
. ^! _# S5 \& K q: q5 u1 Z) M4 `) j dfs(e.getKey(), result, graph);
- f# {' B4 q" M( m& z, {; w }' u2 z9 Q8 t( p
}
7 B& {8 ^6 A1 |* O* K if (result.isEmpty()) {
9 ?# W+ V" C% s1 r# t4 H' R dfs(pairs[0][0], result, graph);
/ \$ x+ U5 |& H8 l' v8 u }& E y# N( T! J7 O, `! r! f/ \+ X
int[][] arr = new int[result.size()][];
$ R$ p7 o& ]; q; u5 y+ x3 X for (int i = 0; i < result.size(); i++) {: L' @5 y) H$ b# _9 E2 `: @& U
arr[i] = result.get(result.size() - i - 1);4 n: H0 z9 }$ C& I% ~8 T) b, x2 c" N% Z
} ~& x% z: |2 E" c
return arr;2 F3 w$ u6 b6 z0 a0 M: s% ]7 D, ?
}
7 F2 }6 a- J; A+ l0 } Y& t4 N& y( y6 U) I
private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {8 @( g) ]" B. s
var next = graph.get(start);
& X# Q$ I1 Y; I' }3 Z while (next != null && !next.isEmpty()) {
0 H3 M8 i5 y* x0 f& z' P- ? int to = next.poll();, `+ M, m* x7 k' l$ D: `" `; g
dfs(to, result, graph);
5 o$ z# r- X( K: v8 Z$ i: E result.add(new int[]{start, to});% X$ o# Y& M) A( h3 Q
}5 t$ F! I% G+ p2 u: p
}
9 K# U, z0 w! M7 Y! K} |