登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】) b6 m$ ?# y! a& `! \% W) v! D
2 Q) |& h. o3 }% G解题思路
8 C% s0 S. |- C0 R签到题,枚举所有组合即可。0 u, f; y3 N8 b; ]
, F7 s# q/ L8 t' K/ ^ B4 m
代码展示
2 Z5 S1 q2 ? p d
7 x i H2 f! T" v: @- j! V4 F6 cclass Solution {3 f6 I/ D9 ^6 W6 H- Z& _
public int[] findEvenNumbers(int[] digits) {
1 l0 o6 k1 }. _; g3 a Set<Integer> result = new HashSet<>();
% d2 t j9 m6 E( ]- l# o for (int i = 0; i < digits.length; i++) {1 f9 v% W. M& L3 }, M
for (int j = 0; j < digits.length; j++) {
1 t' S" W* P- g) z: ]' g* W- g% Y$ x for (int k = 0; k < digits.length; k++) {. ^" J8 Q/ ]/ }0 f
if (i == j || j == k || i == k) {; z$ R/ L+ a c
continue;% _9 P8 S. U+ T
}
7 g+ } N, H5 o9 P4 S2 \ if (digits[i] != 0 && digits[k] % 2 == 0) {
5 M+ _! N- q! ~* f8 t result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);; [% ]) Q' k0 o
}/ k/ M5 ?" W, C8 @& \
}
/ r$ k5 m h3 S }
' p& m, w" X# x }
" @: W' l! b% z7 w int[] arr = result.stream().mapToInt(i -> i).toArray();
& `2 Q; V2 f/ t Arrays.sort(arr);$ M' p% f5 N0 Q1 }% @" U5 E5 P
return arr;
( \1 I4 h/ `# }/ g* a }
2 o0 N& f. U# h! q}0 j6 J6 R5 O' j
+ M0 A% A. r& Z4 I+ ^6 q5 r' c& R$ c
% m% ?: `5 X- `. U' Z【 NO.2 删除链表的中间节点】
* R1 X# e4 M! [' p# P' L, x- j, Q& |& W# M6 e' u% c* G
解题思路
7 ~, J. B c! Q @快慢指针的经典题目。; f3 L" r7 D4 T
) f% \& ^5 B5 y& ^1 S. B- M& a. W代码展示- y4 `- r2 J1 r! |
1 w: {0 i* ~% A9 P) Xclass Solution {5 V- _2 m. X7 @# M9 |, ?
public ListNode deleteMiddle(ListNode head) {) z) K! v+ d5 H1 }" M1 d
if (head == null || head.next == null) {& \6 }) C* e( Z6 ]% r
return null;1 Z: C8 h7 J E! }5 P
}0 I, u1 b+ s& X* a3 S
ListNode slow = head;
1 C" V) L& ?* ^) O1 K: z9 Z ListNode fast = head.next;
2 Z% R# N e6 k$ Y, C7 K while (fast != null) {$ U* ^9 P9 g2 V8 z. i
fast = fast.next;
7 |( {1 \$ m) E# L% m- o if (fast != null && fast.next != null) {
& y) i3 I4 ^: \, |# M9 P- B" y6 T slow = slow.next;* @/ k; ?* {) w" l
fast = fast.next;
6 G' I0 w& ]9 G }: ^6 T2 L3 S" K( \! S
}
/ F* R/ r+ @; D7 ]( A! w; E slow.next = slow.next.next;
, Q' y/ A% L$ R' {" Q$ _ return head;
8 F% n, a1 m3 }( v1 A2 z1 y# j }
0 |- q% F/ g4 e7 a}& H6 H4 F- o; X# X5 p2 P3 B
- c! Q6 Q& t* y' ~& H, }( z1 k( B! E @ v: y
【 NO.3 从二叉树一个节点到另一个节点每一步的方向】1 U" y/ k! y9 H! n
2 `2 G2 a' `' s" T" x# F* f解题思路
2 y& t" E' ], v, `8 d1 U分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。
5 t! U! i; a- n% z1 E4 `1 t$ v# @& F- s7 X+ \
代码展示
/ B( q+ a* T9 s- E& T0 @5 G' U* L6 Q% z3 |( W- r4 G
class Solution {
. Q0 @1 j& ?$ r! Q1 T# g( T6 q public String getDirections(TreeNode root, int startValue, int destValue) {: L' \7 d. ~, l& Y
StringBuilder start = new StringBuilder();" Y5 C0 j( _/ X3 n8 }! V
StringBuilder dest = new StringBuilder(); {0 b$ Z$ K' t* b( W9 ?( r
getDirections(root, startValue, start);
0 c3 K6 i. S- M1 w7 o P getDirections(root, destValue, dest);5 a! r" s& F) I0 Q& {! @5 f
int common = 0;( @" T7 L( y! s8 O% A
while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {# v( S3 t* q% }8 l; |! D& H
common++;
6 c7 n. [: h7 H* d; Z! ~6 I+ t }
& n4 a% g7 _: k1 O" A! @0 d* x if (common > 0) {% x( x% w' R! ?+ j( g1 |8 C5 b
start.delete(0, common);
$ k* m) K" J" o+ [) U dest.delete(0, common);; {$ @- Y4 [& u
}& k1 y9 c+ ~# o+ N& a1 c
for (int i = 0; i < start.length(); i++) {
+ E0 y$ \; D) q( Q start.setCharAt(i, 'U');
& J8 ?" N5 _& C: F& Y& q7 @3 s }
$ ~7 J8 ^( ^9 h6 L3 p return start.append(dest).toString();
$ R4 [. x: Z; a6 a/ u }
" Y9 J% `" Z6 \) i5 I1 `2 h3 |3 c& ~! D) I( f& a
private boolean getDirections(TreeNode root, int value, StringBuilder sb) {
. u0 d1 L& V# k) P0 p% c7 H& k if (root == null) {
K5 N U/ `# l+ H2 o; ?+ r) H return false;
- g2 P5 |' F e" I }
6 ^6 ]6 K5 k2 M if (root.val == value) {
$ s# V- \7 M* t) L7 [+ d; U2 y return true;, L5 h2 w! _$ B
}. P; S: B$ X* n. u/ {/ s
int len = sb.length();$ O3 C3 V$ N0 O
sb.append('L');4 K! B9 n% U& a4 Q0 ~
if (getDirections(root.left, value, sb)) {2 O2 Z( A* A$ e# i
return true;
8 Z7 H# G& C( D0 X+ I# q1 { }
( t3 C- ^# x) F" G( K6 e9 Q sb.delete(len, sb.length());
6 r, F( n* k. F sb.append('R');, `! a/ `( B9 ]/ L2 r
return getDirections(root.right, value, sb);
0 [; g+ w) ]! b) f3 h }
8 O$ A" R" n; }' _7 Q' D! j}
, ?: o4 `4 c( } ?$ s ^: W! O. P+ c% C) ^% T2 i7 `
; U3 Z$ W( H. N. `4 D+ o
【 NO.4 合法重新排列数对】/ g8 n) Y Z, q n# P# o7 K D
; l4 [ J- z2 G! Q
解题思路- g. d' U( e0 b9 E1 I% K
有向图求欧拉路径的模板题。
: x8 p7 ]- V0 o! w. s
8 p5 y* N3 y0 ?代码展示
) y( ?) H# K1 R* @" A" ~5 j2 }- p; ? m4 L' B
class Solution {
6 B; O B& c( z9 Y6 U9 d$ t( _ public int[][] validArrangement(int[][] pairs) {
, g# x5 I4 K0 B* P Map<Integer, LinkedList<Integer>> graph = new HashMap<>();
) @% S# r) k" f* [! i1 c0 @( z Map<Integer, Integer> degree = new HashMap<>();. \- ~ O) K1 _; J1 K9 ~
for (var p : pairs) {
; ]! V3 N3 j/ t0 c! b _* W if (!graph.containsKey(p[0])) {
1 L/ i, l' i( G) X% K graph.put(p[0], new LinkedList<>());
' L$ _7 s9 ]- u- K1 J }
+ K5 E/ \' p: t graph.get(p[0]).add(p[1]);0 c7 Y2 g, e* y
degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);) G4 F7 W/ K6 t# \( B$ m
degree.put(p[1], degree.getOrDefault(p[1], 0) + 1);( h- d; K/ ]" S- l
}
. r' ]3 ?2 j1 Q1 {4 ^% Z List<int[]> result = new ArrayList<>();
% X" }3 |5 z; j3 t! ~9 K; n; A for (var e : degree.entrySet()) {8 w# U; `! \7 e7 b
if (e.getValue() < 0) {4 Z! D& `1 e* u+ g2 F+ y
dfs(e.getKey(), result, graph);
( [; t! e9 D0 x }
" y( R6 C9 q4 m4 ] }
" w3 ?" K* t# ]. b if (result.isEmpty()) {
2 y9 a0 {0 }! C% a9 {( n dfs(pairs[0][0], result, graph);0 u4 L! ?/ s) C3 |' T
}- Y% p1 Q" r" p
int[][] arr = new int[result.size()][];
6 e: p( X8 ]9 n2 @ for (int i = 0; i < result.size(); i++) {
. V* s8 ^: ^# @! F arr[i] = result.get(result.size() - i - 1);( B% C( }1 t/ ?1 k
}7 c4 a9 C9 _2 W& F' `7 z! M& W+ p2 r
return arr;
2 F) _* \2 h# o }
+ d7 \" e6 U* f% C
' V, [' Y6 j- J4 @9 ]- b private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {
9 l: S2 G2 E' X* p) \ var next = graph.get(start);
, D$ E7 M0 u4 \$ k) Y6 H, m while (next != null && !next.isEmpty()) {
' n# F7 Q6 t* n! g/ U" Q, m1 ^' a: e int to = next.poll();
7 [1 \ x$ V1 r. |0 ~. U dfs(to, result, graph);
2 t( O( m8 D; P result.add(new int[]{start, to});" B/ i8 n' j: M2 h5 w. ^4 {
}" H$ C. C% v, L' I+ N9 @4 [9 F! G
}
; t9 |/ D* X, H7 r5 L} |