登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 Excel 表中某个范围内的单元格】
5 [# D: F5 K7 ~( {1 c2 h" ^, E5 c6 ?' R, p* ^3 W0 w
解题思路
& c6 M( c: s# Z% e w; H- ]通过 char 类型的加减法进行坐标转换。6 q5 ]3 W/ D/ y
% [& e/ u+ [& I1 J7 i- D7 p! ~代码展示2 Z- E& v& F! h: _- @% s
/ a; L: B' V0 @' B2 v: nclass Solution {
& D# w- \- q6 I6 l/ H# X6 a5 O( k public List<String> cellsInRange(String s) {
* r% {. L$ J/ Z- s int startX = s.charAt(1) - '1';- Q e9 f3 m6 `9 j4 L7 k
int startY = s.charAt(0) - 'A';% N9 M: M ]9 e& B
int endX = s.charAt(4) - '1';
% T9 V6 s; B5 I- M! k int endY = s.charAt(3) - 'A';
/ x* u- o4 e1 O5 ~2 B List<String> res = new ArrayList<>();
' h' P9 \. s# L for (int y = startY; y <= endY; y++) {
% Q# I: c4 Q0 a4 U2 m& e for (int x = startX; x <= endX; x++) {
% t; J x5 B2 A$ @% o. ]2 k res.add(String.valueOf(new char[]{(char) (y + 'A'), (char) (x + '1')}));
1 N- G ], F9 v$ H8 P! `8 A. S }
' Z ?2 p6 @) X! e& I; ^ }" x5 c( U3 O. y7 z7 `5 ~* P# E; h
return res;
/ w6 ^- z2 M: ?, ~7 W. N4 p( R/ [ }) O( H1 i O2 }
}
* A, @5 A& K! |, J; m
3 S% t7 u, X6 D" b( I, E( l/ ^. X+ I- D8 Q* n2 E; Z$ M: l1 z! x
【 NO.2 向数组中追加 K 个整数】0 C& U7 z" Y8 u+ ^: f
# |, c6 Q! K/ d2 F解题思路; k+ t+ M% u" R8 W6 p5 {
给原数组排序,然后向有缝隙的位置插入即可。
9 d- D/ {! o# t8 k2 R4 d( l( w+ F" G: W9 Q
代码展示( u5 x0 n; u9 B- ~: h
8 ]7 a' g, h9 U
class Solution {
4 d, \) S( g# f3 U T public long minimalKSum(int[] nums, int k) {* t% y# Z# h% Z) k
Arrays.sort(nums);( P! T' s* g( M4 X, G0 X
long res = 0;) V' `) m7 I( f1 q$ D- }
int last = 0;4 w+ |' [% Q7 l! k% k
for (int num : nums) {+ M2 N# n' C) D4 V8 G: A
// (last, num)
" w1 s( d* Y8 w+ I if (last == num) {( P$ j) P) c( I! Q
continue;* T1 k E. Z' I* ]2 T# n1 j+ J
}
: m1 M6 ^4 C% @" }3 O7 R int cnt = Math.min(k, num - last - 1);
$ C5 L1 P$ v+ Z/ y$ }3 \ k -= cnt;
. c U9 w6 w- C" s+ `! q res += (long) (last + 1 + last + cnt) * cnt / 2;' P8 ?6 c/ c: K1 n. g
last = num;* T! c1 y# y5 A! E' z4 v
if (k == 0) {
/ G% F- [' ?9 @" F. f4 h4 v break;
. u G. P% W1 c1 s, h }, S* |( d6 H& |3 Y, r
}' b) ?5 z' ^: ~
if (k > 0) {1 J8 w) h1 t+ @9 \
res += (long) (last + 1 + last + k) * k / 2;
, `% W7 {& [0 p0 P2 X, V }8 [% s q! a* b- E$ p+ l
return res;
/ b- k4 l) l6 j3 }7 y4 H1 m3 o, } }
! A$ Q; e, e, I- s) J5 k5 U) w}
; w2 r( V `0 b T: c0 w- E5 R8 o
7 F( o, w; v/ O【 NO.3 根据描述创建二叉树】$ }4 J$ a1 s- d
0 P+ k2 h n* d9 H# ]" g; K解题思路
& i4 @7 ]9 {& k* k$ V6 w/ L使用两个 Map, 一个记录节点值到节点的映射,一个记录节点到父节点的映射。
0 v5 N f( V1 s/ V% V, Y: r' k- Y6 j6 Y
代码展示/ ?) K+ P" ]# u2 L
/ Y+ } P7 d) k$ b
class Solution {
' O. t; c4 x4 J& @$ Z1 ? public TreeNode createBinaryTree(int[][] descriptions) {5 x4 W4 i7 h Q: O0 j
Map<Integer, Integer> parent = new HashMap<>();
; J: W$ b9 z" `8 t# d Map<Integer, TreeNode> valueToNode = new HashMap<>();( ~# S6 V5 }& D
for (var desc : descriptions) {
3 _* s, T' n; i& ]) [- R- _) b% } for (int i = 0; i < 2; i++) {' Y0 |$ O# M! V! B
if (!valueToNode.containsKey(desc[i])) {
- c/ C* j }( w& l6 ` valueToNode.put(desc[i], new TreeNode(desc[i]));
8 [) [; z$ c0 s0 @: `. H. Y8 w! ` }9 t) O8 S' M$ {
}3 p0 X* a+ v" N. Y: |7 _: o6 T
parent.put(desc[1], desc[0]);5 C# [* Q+ R( }3 }2 l
if (desc[2] == 1) {
! L9 c$ J( H$ U% v, n valueToNode.get(desc[0]).left = valueToNode.get(desc[1]); O4 T7 q# B' E" C; V
} else {
( L. y9 R- r4 \2 N; X- T$ z2 Z valueToNode.get(desc[0]).right = valueToNode.get(desc[1]);
; x4 E* K) }: e7 u3 \5 C8 M, V- `* @ }
: A, [& M, H7 D5 q }
' P4 ^# q( m) n. _ int cur = descriptions[0][0]; s& f- B6 r& @% C2 E# U- o
while (parent.containsKey(cur)) {. M+ `; r, u% m5 a" K
cur = parent.get(cur);& V3 _# t2 z8 ^
}- u: l1 \7 J, t/ S4 ]9 Z
return valueToNode.get(cur);. n( \" D J+ C8 q$ {$ W9 _
}8 m% I8 l) E. s% N
}
8 I4 s: \: x [9 N0 \ G. J6 q' a' I8 G0 k/ y
【 NO.4 替换数组中的非互质数】
+ |! S/ R; @# x$ v5 @2 ~
0 `7 D3 Q0 u" V9 r$ F4 J解题思路
" B& s4 }, m. E& X/ d正着遍历、反着遍历,直到无法再合并为止。详见注释。
% R3 N* e' E# `% C* o/ Q6 I Z
* Q3 y9 D4 ]9 @- y( J* t代码展示
0 M" _; j1 j5 R N; X$ S+ R+ D3 U7 K( g8 d0 e
class Solution {
2 _' q" D. B$ }; U) d5 N- D public List<Integer> replaceNonCoprimes(int[] nums) {. E' T( {# [! k) j& e% h4 N
List<Integer> list = new ArrayList<>();
; A7 Z' F( i V for (int num : nums) {
( p; ~$ y3 a% X- {$ v$ X3 E list.add(num);7 S- N% }1 I" p @/ x7 a6 T
}
+ K- e' v1 _4 g, _9 f1 A. \ while (true) {
9 A# ~/ ?% q1 A( f" ^% _" [0 L0 { // 正着遍历,合并一次+ l: K V. b$ v* L
List<Integer> merged = merge(list);- W% }5 r$ \* e
if (list.size() == merged.size()) { // 合并前后长度一致,说明无法再合并,直接返回8 K. \0 g8 E6 ^: Z7 B$ D: r: ^
return merged;7 ~8 r/ X' G: H. S( P1 ?9 |/ y
}
' k; X; Q+ P; j; N% n1 B // 反着遍历,合并一次
( ?4 D* w9 m9 s/ z( ] list = reverse(merge(reverse(merged)));; j J0 X( k9 ^6 q; z
}
1 b( p; q$ Z0 | }
6 k |- j& J7 S; t/ H# \; e& P- x! {/ F# h9 g. g
private List<Integer> merge(List<Integer> nums) {
) i/ B- \$ N# e4 d List<Integer> res = new ArrayList<>();
( f$ Y) ~% z, T" `( h$ A7 l if (nums.size() == 1) {
% X! N1 A* l1 i3 T8 M' _" v res.add(nums.get(0));
, ]3 \- B2 g/ v8 ^- c4 K! \ return res;$ }5 z0 E% o% _8 P
}4 v W( n4 j: ?- P3 ]7 M
// 一次合并中,令 i, j 表示相邻的两个元素0 t/ D; x3 P8 r1 O
// 当 nums[i], nums[j] 可合并时,nums[i] = lcm, j++ 即可- c: A7 R- {- w) i- q
// 最终将结果 add 到 res 中# A2 K5 g" O% v
for (int i = 0, j = 1; j < nums.size(); j++) {
. n, y9 k+ y0 P8 q3 \ i. Y* W& R int g = gcd(nums.get(i), nums.get(j));5 z7 x7 E9 W( z* Z
if (g > 1) {( x: s0 r( s9 j" Q$ U
nums.set(i, nums.get(i) / g * nums.get(j));; {6 d9 y% T! o Y* k2 Q6 m' g# y! m' Q
if (j == nums.size() - 1) {5 |: J) `; N, a$ B! }1 F
res.add(nums.get(i));
; m) T) k5 ~; K3 c G+ r( }$ Y }
- H6 [ K8 r1 k4 Y1 i! p } else {
?% f) v3 T+ d' ] res.add(nums.get(i));! ~" H& A4 u6 Q4 b0 D/ n, I4 q( [* y
i = j;9 Y7 z8 I6 N* [5 k: b/ y* q
if (j == nums.size() - 1) {
# @% e- e6 O8 O2 }2 f; F* O res.add(nums.get(j));
# N0 Q+ \% t- `! K9 L }
# T7 G; r% x* ^# ] }6 D B6 p5 A. D' K% s2 F
}! q% l9 P) ~' b9 q/ _: X
return res;, q% z& B7 Y% E9 `: l6 _5 r
}
! _5 Z, G8 ~) J* ~/ c: O" n, x& y7 H8 \6 w3 v" Z
private List<Integer> reverse(List<Integer> list) {5 i" {9 V2 ^5 W, Q4 V
List<Integer> rev = new ArrayList<>();
" V0 k% }( T- J/ B& j# Y for (int i = list.size() - 1; i >= 0; i--) { Z: ?' N* ?+ P) @% u$ |3 [
rev.add(list.get(i));' `& d4 e }, \" s. d- c9 a8 @) d) p
}. |0 B, g+ [6 ], K2 |% g; w' O
return rev;
" r6 e, y: \! x. D% {! Y* Z }
. ~( p9 M" t: X; Q |6 r. [$ \ N) i' j
6 B# v! q$ O& B0 |+ P' \* G
private int gcd(int a, int b) {
; n7 B* X# K, T2 {4 P. q return b == 0 ? a : gcd(b, a % b);
- b: }1 W/ `6 D o2 d- N }! W$ u6 P# F" |2 h' r
} |