登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】2 S* O# p$ S* a. i6 h
. ~8 F: N3 f( z7 ^/ L
解题思路8 Z4 ?8 B: d0 @0 A5 ~: _
签到题,枚举所有组合即可。9 K# N) e1 V, @6 A9 l I7 P
/ Y% m( V4 r, H% F+ O' G( b d代码展示
1 Z0 K! g- n9 v2 |3 X# _! u9 q* Q/ B$ v' f
class Solution {. n- t# f i6 g* a3 w. ?) b
public int[] findEvenNumbers(int[] digits) {2 O6 ?, B: p, g8 s
Set<Integer> result = new HashSet<>();
% ]1 \1 b3 z. m& m0 N8 n for (int i = 0; i < digits.length; i++) {- ?% h6 |4 P4 B5 x& L
for (int j = 0; j < digits.length; j++) {0 a' H0 P5 g$ S6 N: ?
for (int k = 0; k < digits.length; k++) {
O* q. m- T9 H* J% v if (i == j || j == k || i == k) {* M" A, U$ H) Y1 y& b
continue;1 m- Z4 m7 C7 c3 k$ K+ }
}
: S8 e4 p4 v4 i x* | if (digits[i] != 0 && digits[k] % 2 == 0) {+ c% |! w3 ~ a( }& R
result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);9 a; |9 a9 Q! P( x# g' q
}
( q9 f# K( h% H6 N: B1 |5 a }
9 c2 O3 j8 H' C1 e1 U6 {( a. i }& {6 B1 q5 H+ {1 S) v0 p
}0 W4 V( Y/ A; v. d7 p
int[] arr = result.stream().mapToInt(i -> i).toArray();0 @+ }( g' v" e+ t0 M* A
Arrays.sort(arr);
# Q0 A/ h& l( W7 f9 G, }4 D return arr;
0 V6 U( s- c5 V! t Y }
5 ~+ P0 B0 Q2 y$ l}- A: R- s) x* O1 P) a; E1 q
2 R, v7 \1 i* L+ L: J/ G7 x% G
: {9 s6 F; P1 b* g% t【 NO.2 删除链表的中间节点】
; n# E0 `" ~$ I: |" v1 F% ~- Z1 \% Y# M/ d
解题思路
: ^" F' E* N1 n快慢指针的经典题目。4 n" U3 v: P8 [3 s! Q) V
. X" F# a$ y, s$ i& z. n* s# d! h; N, h
代码展示$ d! V* o0 L1 ~% X J
7 ?/ P( b- w+ Q) h& ^ j" e4 `class Solution {
1 G8 z1 P3 b% B, n { public ListNode deleteMiddle(ListNode head) {0 n* [ w) ]1 u- r; I$ E
if (head == null || head.next == null) {* w9 d' n2 h6 ~5 N6 t+ b4 J
return null;% u* g+ g: S& ^! Y: |% H
}- b: `$ ^, Y/ ~9 {
ListNode slow = head;
& H. |: R- p% n( e, A7 l4 e+ x ListNode fast = head.next;, B4 ]- j& X6 @
while (fast != null) {
% k9 {9 t( L# U. U O/ u7 T6 Z fast = fast.next;
4 j; S9 Z8 B5 @, L if (fast != null && fast.next != null) {
- t+ V, B9 ~2 w) O& w d6 z. x slow = slow.next;" X6 ~! }+ {# x, u" e% {$ w7 m
fast = fast.next;9 K8 s0 K( C3 m& w6 N @: ^
}
+ Y9 h' @7 ~1 O) |: O, f6 Z }
7 M& f$ q& j( J slow.next = slow.next.next;- L0 W: H, h9 ^; L0 T
return head;
/ \$ u! n( T0 }0 L6 w }
+ A- x+ `" Z5 Y5 a: v- I}
) g! o* b8 H# A4 f7 l
* I6 x' {6 p/ N( ]7 V1 t2 W. q8 J @% B" O9 Y' [
【 NO.3 从二叉树一个节点到另一个节点每一步的方向】+ }8 ^- |* e Z6 X3 M
- [/ Z& M" E u! o; ^( b1 }解题思路* F4 G$ M, Z& Y4 _
分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。5 D8 u( i+ M+ e) f8 `3 |
. n- y! D7 [7 F7 Z' Q) l
代码展示
7 f4 x1 e* l- q4 E! u9 y* n! @; W% D8 ^- }
class Solution {
$ Y# S3 v. Z4 C public String getDirections(TreeNode root, int startValue, int destValue) {
7 ~0 A( z; l, Z1 k* P" W StringBuilder start = new StringBuilder();3 p0 ~* ~- V$ d8 m( \
StringBuilder dest = new StringBuilder();6 O, q3 }2 c, ?& D/ Q4 m4 j
getDirections(root, startValue, start);& M% s6 N! V. K% ^& F7 R
getDirections(root, destValue, dest);. ]9 Q" k: t! K- Y
int common = 0;3 w' f# K+ \3 U* ^
while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {
M6 Q( |7 `" X d# T- S7 b" K common++;# O3 S7 p2 [$ z. {
}
9 `" h9 K1 \2 q7 | if (common > 0) {9 n+ J& a; e2 k
start.delete(0, common);
1 `" `0 T, |& x7 o1 @: j) ]6 F- q dest.delete(0, common);
2 c' w. e4 J- E }$ x e. x, ?9 X2 U
for (int i = 0; i < start.length(); i++) {
2 T, ^5 N5 Y$ H" L/ \4 Y4 ~0 [8 } start.setCharAt(i, 'U');. ?& T; M* m& W, T6 I% T
}
6 Q0 h- o3 D/ w- C return start.append(dest).toString();
. `% r% l. U# b% A9 f }
2 N+ _: x- F4 e, T# t4 ?/ |, h; S9 B, [7 h& d
private boolean getDirections(TreeNode root, int value, StringBuilder sb) {, P2 u$ }. `2 n
if (root == null) {
$ B3 R* x! i' F% [& k return false;
; A# U7 J5 v( f9 o+ g }
D. z( m* H0 Y8 H if (root.val == value) {
: ^( v$ v6 Y& e0 b' Y0 M$ k: g return true;- J) Y3 q( V! J
}7 k, y* ]; O. X- g: b9 |$ y% u
int len = sb.length();$ Z2 {/ ?$ i: z" `- `) v! L+ S
sb.append('L');
# e$ @7 O$ S7 W/ \& N if (getDirections(root.left, value, sb)) {0 r7 H% c& O% m9 v( E
return true;3 E7 h- s. W. S& F
}5 }3 D, {7 j3 ] B# E8 _! r) Q) N
sb.delete(len, sb.length());$ T! K& o# G `2 v. F2 D* P1 ]0 Q
sb.append('R');) w+ O& ?; e2 o4 e$ ~
return getDirections(root.right, value, sb);3 J" _( I3 W) ~6 d# b: G# ^
}# @# j j {6 L! Z, ^
}
. f t7 y5 b5 ?; ^& F0 ?0 M4 P- U) i. E% `( \/ T$ A* C
( z" ]! F: S$ x9 g
【 NO.4 合法重新排列数对】 @" n5 `, p- _% p. R" \! E
- p+ E3 E( j) _ S: I解题思路
Q& W& x2 x c0 s3 s有向图求欧拉路径的模板题。
' ^! u; [$ |3 A% G, F8 ?2 b a; R- M: o; s0 A: f* a# }' `
代码展示$ [$ C9 M& I! | j" g7 Q3 K
: g3 E. ?% {$ }2 Eclass Solution {0 u' P0 Y7 r0 ~3 T
public int[][] validArrangement(int[][] pairs) {
: g4 d/ [) ]: f* C5 N( W Map<Integer, LinkedList<Integer>> graph = new HashMap<>();
+ t6 A* Y! ~( S& v" w5 h. u" Z2 b! P Map<Integer, Integer> degree = new HashMap<>();
: P) P# H( z8 W& I2 I for (var p : pairs) {7 y7 P# G0 `9 |6 M$ u0 e; ^
if (!graph.containsKey(p[0])) { X' |7 }* \1 L% |
graph.put(p[0], new LinkedList<>());/ ~ m* A1 H' G3 ]/ m @' W% V( z! j
}
; B( U. ~' ?5 o: u+ k graph.get(p[0]).add(p[1]);& @. h) p( e- |0 ]" d- E
degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);/ g! c7 a, N t3 l3 D! s
degree.put(p[1], degree.getOrDefault(p[1], 0) + 1);
6 o/ |6 F9 W) \- q4 z }4 x# z- f6 m; E0 |/ o
List<int[]> result = new ArrayList<>();
! ^% N9 W {; _2 e7 { for (var e : degree.entrySet()) {
& w: I/ c) B5 O5 T4 f if (e.getValue() < 0) {& r- J- j, u k' B& \: V, B
dfs(e.getKey(), result, graph);' u/ R j* M; r# o
}* A6 M' i+ @4 F2 J
}" K; v' _/ r1 C3 F" M2 b
if (result.isEmpty()) {/ s7 q F) G, R) p5 \+ u8 [7 i
dfs(pairs[0][0], result, graph);
, _0 `$ w$ l% U7 u0 H; }) T: m o }
- N/ _, s2 c7 G int[][] arr = new int[result.size()][];
2 O! J$ N: m/ w; h* C4 R4 C for (int i = 0; i < result.size(); i++) {
( P, E$ _) @6 x/ P5 t$ x- T arr[i] = result.get(result.size() - i - 1);6 f& j( F$ [# l- d& I# p4 e, Q' E
}
0 X! v5 x" r {' M; N$ z return arr;
# D2 |6 A5 W6 G$ x* O& t9 s }
5 _, @! x5 A7 L; p( w
$ {& b4 r$ p7 ~! F8 Y; _& I private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {
+ D1 K$ V# e( _, u, w" D var next = graph.get(start);
" E- }' J/ g% i) J0 g while (next != null && !next.isEmpty()) {
2 l0 V7 B& u( J% h" ^1 U/ z4 j int to = next.poll();
. y( q y0 N" J( y/ g dfs(to, result, graph);+ c& @: V( J2 {
result.add(new int[]{start, to});0 b, G! o3 }$ q( J& j* \
}
% n8 H8 `% p/ s. H$ f+ @ }9 l+ |6 @# Z0 [& b; }: b
} |