登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 找出 3 位偶数】. B6 t& X1 }. F' a) b
' A; u3 x: o7 |. G+ D, D8 X
解题思路
# g6 ~8 ^, X, k签到题,枚举所有组合即可。3 N9 L5 W- m: z' b
3 W/ I* l( X( _7 ?9 x' A6 S& h代码展示9 f$ X. x4 Y' H/ M9 s' ?" o/ g
0 t/ I2 o: I& @3 t0 o7 S+ ^$ @7 Yclass Solution {
. n3 v# T z6 m9 P4 v& J5 r4 j( b public int[] findEvenNumbers(int[] digits) {/ y& M% t, j5 ]' w3 D7 r) p
Set<Integer> result = new HashSet<>();
4 x& V( t. Y1 o, G0 ~ for (int i = 0; i < digits.length; i++) {
E1 N6 ~4 ?. A# k. P" Q for (int j = 0; j < digits.length; j++) {. J+ s- Z$ {, T, t( o2 I
for (int k = 0; k < digits.length; k++) {
% s% z7 Y9 J6 Z$ g/ ^4 V% N if (i == j || j == k || i == k) {
! [5 e# ]* Q# ]5 |% p7 W continue;
! \; \9 z3 C2 s" @; n, S5 b" o }
- f: Y7 U- W7 q if (digits[i] != 0 && digits[k] % 2 == 0) {' k5 \3 S. ^8 p! A9 c8 Y
result.add(digits[i] * 100 + digits[j] * 10 + digits[k]);
( {9 S ~/ A$ t! T( `8 h1 P }
4 ]# ]) r9 ~2 Y7 C }, @" l# _4 k" b
}' R0 F$ n' H, h& N; a( l
}
8 `: B: }8 N# \3 G, Y& T O( m* j int[] arr = result.stream().mapToInt(i -> i).toArray();( u+ s% ^2 t, R K% o
Arrays.sort(arr);+ \3 f. D7 h% `; Y5 v+ ?% L5 k
return arr;: n' c. Z4 P3 o( G6 V
}
4 D ~# `5 I1 Y1 F. h( N2 E. Q9 Q}
0 R: ~+ ~% D: o3 q1 _' C
- `# V2 N; c8 O: |( y+ Z
5 f" r( U+ v. c0 I7 |7 m a- r【 NO.2 删除链表的中间节点】6 u, [, l! E1 }$ K
) S* l3 K- U5 _# o( {/ k解题思路
1 d3 ]3 s8 y2 ?+ N6 d快慢指针的经典题目。' i. J9 f6 h6 M
/ I2 i3 ~; q1 N- C E: O代码展示
9 B# p% e' D0 O- M6 R- f/ F8 A
7 `' W0 [8 s% q9 m* y, L9 v. Yclass Solution {3 d; u3 H+ Q B# N. s) M* R5 t
public ListNode deleteMiddle(ListNode head) {
* I7 o* p! u, O2 T+ X if (head == null || head.next == null) {" w$ c2 G2 ]( G e u4 p1 p/ s
return null;2 V9 ?! p" f( p4 t8 z% Y
}% M& {/ \8 P- V& M6 @& E, f* k
ListNode slow = head;+ t! y& H! C% i* j! w9 Q
ListNode fast = head.next;0 J1 u8 g: ?5 A
while (fast != null) {
0 s4 n+ C- s: Q g" _3 |, J fast = fast.next;
7 W2 ^& Y, v E* H& k- K if (fast != null && fast.next != null) {
. W% H8 p0 T F+ b- r v- c slow = slow.next;' H( D [" }4 w9 ~2 o
fast = fast.next;0 v2 {- Q, Z: Z: t- ]* S
}
- a) P* D- j1 m$ ~: S }
+ o+ W* j6 j/ M1 c0 c) t7 g7 r y2 i slow.next = slow.next.next;
; j% I$ t+ G7 p! [4 k8 M return head;' t k# b+ z7 K0 U; P, [: |" M) d/ i
}
- k7 Z4 F0 G, x, `}
8 F. \8 p5 d8 u8 {5 g: M$ S# g* P c2 d2 a1 o- h" e
J+ ~0 ~6 R* H: @& J【 NO.3 从二叉树一个节点到另一个节点每一步的方向】8 R: a5 d8 q8 C
) A- s' M7 Y- S
解题思路
# w8 ?6 w& `- w: ^& f分别求出从根节点到 startValue 和 destValue 的路径,然后删去公共的部分,再把走向 startValue 的部分全部替换为 U 即可。
1 Y" I: H; X% u" C" T4 r) _* \& ]7 z; a
代码展示
2 q7 i$ F6 R2 K; B5 a5 Z' e3 ] T9 J+ j7 e) f6 c" r# g6 [ H$ p
class Solution {
* J8 V1 U1 d) l: U public String getDirections(TreeNode root, int startValue, int destValue) {
( L# I% V9 c3 P1 c( H' ?3 y StringBuilder start = new StringBuilder();4 o$ E4 o+ M6 g9 Y5 }
StringBuilder dest = new StringBuilder();
5 l3 a4 ]" t2 M$ W* ] getDirections(root, startValue, start);
! C$ x2 V+ V+ F& c0 G( { getDirections(root, destValue, dest);. b6 I$ P- X+ R( m# r
int common = 0;
3 q% a8 f- t% @$ }" y/ c while (common < Math.min(start.length(), dest.length()) && start.charAt(common) == dest.charAt(common)) {
0 h0 `6 E3 L$ B# [/ H3 ?9 O6 a common++;$ |4 A6 o0 W) w+ ~& c
}
7 h, C# x- X4 d( f$ M& _ if (common > 0) {% @: A! y9 A& ~9 S
start.delete(0, common);
5 a# P$ S9 O7 f2 s$ H dest.delete(0, common);5 v. i! {/ Z+ u3 j8 B+ a) C
}
1 u$ A( g& `( i9 h for (int i = 0; i < start.length(); i++) {' v! k0 v" }% R; N& U. D" P
start.setCharAt(i, 'U');
/ D9 K- g/ d1 ?3 a# b7 B% @ }
9 [' Z/ Q* b: M' d, M7 C% ^ return start.append(dest).toString();
, ?6 n9 K |2 F* F; m. r }
* W0 d* E4 F$ l. i8 j$ k7 |- e% |9 P6 `
private boolean getDirections(TreeNode root, int value, StringBuilder sb) {
5 l- G" U# a- Y6 s1 m- o) }+ K if (root == null) {- }/ u$ w/ B2 X+ M' w. a! L! ^
return false;
* T) k |0 R1 k. I& y; m9 e }) k0 f- N! L, }
if (root.val == value) {
9 Z8 k, S% X4 f2 x; l return true;, ?$ o3 m4 a4 M" ?( ?% f. Q3 ]2 X
}2 g8 e h& p, a ]+ z# H/ m
int len = sb.length();
1 w3 u9 z3 l3 C( T sb.append('L');
[6 G R d+ T' D+ L if (getDirections(root.left, value, sb)) {" p0 W0 t2 f, |
return true;
" \7 `: G5 Z2 b) ? }
2 w0 c3 ^ N0 u( y sb.delete(len, sb.length());
7 e! _+ I+ }" \( { sb.append('R');
& }9 A( ]. R6 |" u1 O3 c return getDirections(root.right, value, sb);
; @3 z2 ^- j0 U4 ~( a }9 v) @! ~( S2 B1 S1 v) }
}4 ^) Q( X$ c% n) \# a0 u$ F
s9 F ~' r- ^- P$ a& G$ S2 M
( z/ ]: ~8 ]5 ` Q1 A; |【 NO.4 合法重新排列数对】& [- G1 ?' S4 T4 k% f1 n5 T: ^
* I6 {8 r: l* A8 e9 y6 k9 w
解题思路
% e5 K- ~) e, q有向图求欧拉路径的模板题。
6 n& ]; `5 s9 L2 E
! y$ G7 Y, g7 T4 ^# q代码展示( r' J3 [6 O* B4 g
, I) ~' U+ k, x# ~class Solution {
4 d- X$ W+ h; J) P+ h x public int[][] validArrangement(int[][] pairs) {; I6 v0 D, |2 k: d5 l8 K3 R1 M
Map<Integer, LinkedList<Integer>> graph = new HashMap<>();
; h; z. R- {% U% ~- | Map<Integer, Integer> degree = new HashMap<>();3 M; K) B/ I0 p, N
for (var p : pairs) {, j7 ]: f4 @0 Q% G. j; U" |! }
if (!graph.containsKey(p[0])) {+ Y H) @ S' q% G
graph.put(p[0], new LinkedList<>());/ J: X7 w$ @4 Z0 \& i
}
: n5 {! R/ s( K) ~ graph.get(p[0]).add(p[1]);0 l: O2 Y6 r$ |; q$ F5 n& F$ R
degree.put(p[0], degree.getOrDefault(p[0], 0) - 1);! i& g* l2 `7 ?. c1 k
degree.put(p[1], degree.getOrDefault(p[1], 0) + 1);
# `8 z& R/ s( a. @$ j4 o, T } q/ M3 E K; v' h) N5 q7 U
List<int[]> result = new ArrayList<>();) S0 g0 X' ^% Q: W. X) P- W
for (var e : degree.entrySet()) {, J3 W& B) b, L
if (e.getValue() < 0) {8 r K6 U+ [& B8 W
dfs(e.getKey(), result, graph);
/ O4 M$ y H& Z9 k2 r" K }4 ?3 x% C' f5 W5 L! i7 X: _' U/ w
}
: Q: t4 B* X' F( F8 x+ {4 I! @5 m if (result.isEmpty()) {6 S3 k D. W$ m$ s6 s, m* Y: _
dfs(pairs[0][0], result, graph);
4 {" f3 l+ Z3 Y8 K }
2 T7 {$ [2 [. Y. o int[][] arr = new int[result.size()][];
9 C5 \* ?1 s5 O for (int i = 0; i < result.size(); i++) {! [' y" D9 }& X* j T$ ]
arr[i] = result.get(result.size() - i - 1);: S; l9 g2 v2 C1 t
}
" D, ?% h F9 b+ g+ Y! D o return arr;7 w6 L# ^! \- x. l. Q. L
}' i* J3 {" M3 c% _* D
, ]( Q% m0 H, U& D2 l" j* j8 `, Q private void dfs(int start, List<int[]> result, Map<Integer, LinkedList<Integer>> graph) {" |) }* K3 c, I, g- i
var next = graph.get(start);, A, H2 c2 B- N: @4 I6 H% k
while (next != null && !next.isEmpty()) {
' p& S u( b0 \: n5 ~2 d int to = next.poll();% T3 f5 T0 q- p2 R
dfs(to, result, graph);
3 F9 |' c( {" ? result.add(new int[]{start, to});
! D0 Q0 v3 T% S" z2 K; v }$ w1 m& _# ]; g% @- p
}- Q, W. v* n: k' y' _$ t6 F
} |