登录后可回复主题
您需要 登录 才可以下载或查看,没有帐号?注册账号
x
【 NO.1 增量元素之间的最大差值】
. X S5 Y2 N @0 m, I; C( J# w/ G; Y& |! l; E
解题思路5 E. X5 P/ C! k4 g8 P5 L* c
遍历数组维护全局最小值,若当前值较大就是一个合理的答案,遍历过程取最大的合理答案即可。
$ B! y' x$ S4 h" i L1 l: X4 r5 @% U; B0 |% W2 o5 W
代码展示/ \! x( l/ ^5 v8 i( t
& D6 R7 W) ^2 }0 t' \. w4 }public class Solution {' a2 G- s) U0 W
public int maximumDifference(int[] nums) {
9 x6 ~- y }/ [) r9 \1 r if (nums == null || nums.length == 0) {7 H V1 p; l' d- d8 m
return 0;9 h6 F7 w, m2 s7 T$ {) O
}7 t! [! ?; E* c$ i
int res = -1;
2 P) e2 x3 K$ k% g& T int minNum = Integer.MAX_VALUE;8 d2 U7 H% x5 d( y
for (int n : nums) {
9 A- i) ]9 k( a7 b+ G/ ^0 d: t& K if (n > minNum) {, Q2 X6 d. G- f/ U1 }, S. O. [
res = Math.max(n - minNum, res);1 A) Y0 S7 a0 N/ W( H
} ^, n( U Z! t5 o$ H1 f
minNum = Math.min(minNum, n);
( F1 J! U9 M' H [4 y- U- O% A }
8 T! g( Q$ g- L4 z. [ return res;
) A% \' ?9 k, e, ?& T }8 A5 h9 X) `3 H U
}
( d: v7 A! i, M5 t+ L
2 ?2 n1 l1 M% Z+ ]' r' J
2 X3 k, [0 x/ ^9 N/ [/ H4 a【 NO.2 网格游戏】
5 _# o& |* b5 H* y* o3 w4 \5 `4 K! { y# u1 k' u( U$ F0 z
解题思路' A* r' V. J3 t' J; J9 p
注意到网格只有两行,所以第一个机器人需要选择的实际上就是从哪一列向下。在它确定了向下的那一列之后,第二个机器人要么只能拿到第一行开始部分的分数,要么只能拿到第一行结尾部分的分数。% o \6 r0 P* |! @' T) \/ d9 S$ O+ Q
7 O7 v6 L& U, M1 c代码展示" d( c4 U, |, x* j# H+ M9 z
# {7 _ A+ Y& g' l/ epublic class Solution {- M$ ]/ T" ~3 j
public long gridGame(int[][] grid) {
$ ^! h/ L# X. _, D: [5 b if (grid == null || grid.length == 0 || grid[0].length == 0) {
* t. L: U; s4 t return 0;
% ~6 w4 E6 X! X+ m- }8 d8 N. ~ }0 e9 p, D, b3 x, g& [0 Q0 _
int n = grid[0].length;
6 ?. }5 @/ u5 x7 n1 V long left = 0, rihgt = 0;$ [' y) N Q7 z9 r7 f% V4 k
for (int i = 1; i < n; i++) {- c# c- P( x2 f! N3 l) _* j
rihgt += grid[0][i];; G5 G# y; L0 D( D6 q+ n
}
+ Q" @/ R# }. X. K: [" K1 \3 J long res = rihgt;
/ h& [( d9 q& \4 p7 ~1 o: c8 f for (int i = 1; i < n; i++) { F4 r+ O; v! t! P( @) g" v# j
left += grid[1][i - 1];
' b, B& h1 S; f9 i7 Q rihgt -= grid[0][i];
% _" H$ @/ K6 ^. O$ _! m( B res = Math.min(res, Math.max(left, rihgt));/ t1 n K6 ~, B3 o) V0 N2 Q9 u# I
}$ ^: r6 M' t8 L7 m/ Q7 o' D9 G4 J
return res;- n# U; R$ V7 [- s7 s
}4 J( k, y* u5 d; A# C( q
}
' e& y% n- P* l1 m% X" @
. k1 Y" O% G( f' K O, V5 ^
1 ]( U! N ]7 x$ V$ p, v【 NO.3 判断单词是否能放入填字游戏内】, c; I y* I( z
: k; y1 r* V& p% a; g" S解题思路
/ A' l) j. X' D- E: @模拟题,详情见注释。
* Q6 J/ C, S ~. M8 x" m& K/ f
% I+ l3 @4 J, _: g: i0 w代码展示
4 W: Y. p$ t/ z# y; A; |' x1 l4 I3 F- ]( T
public class Solution {
; `! K; D, s0 x7 i( k# s* d9 \: ^7 d# `! z Q+ v. }
public boolean placeWordInCrossword(char[][] board, String word) {6 z* b- w/ H' `3 D1 }7 p
* X& f) h) p0 U) r2 D1 \* B if (board == null || board.length == 0 || board[0].length == 0) {6 M: n5 n k7 e- \. f0 X; Z5 B
, Y$ |( l6 ?, F- ]! t return false;5 M5 J5 @5 i. K5 Z
a! r% D6 s/ ?# k* D! R( D
}4 h& w: Y' | k" E8 T
! P8 q2 l5 x" S2 w* g; Y. d. f
int n = board.length;
0 Q% x7 h: V. O8 p# S4 a- C! g3 J; u1 |- J7 p7 C* ]1 Q
int m = board[0].length;
7 D/ {$ m% g- F. j! Z2 b* x- e1 E' T2 u
for (int i = 0; i < n; i++) {8 M$ ]4 j+ b; B7 _
, w6 Z+ O1 W7 F8 U0 ^! w
for (int j = 0; j < m; j++) {
7 r) M% w! n) u2 m X G0 a8 M1 F2 I& L' L0 j- }% v
// 从 (i, j) 开始,尝试水平地、垂直地放置单词
* E' P* u4 R* j8 x4 p$ h% h2 S4 d2 M2 K8 y5 P
if (isValid(board, word, j, j + word.length() - 1, i, true) || isValid(board, word, i, i + word.length() - 1, j, false)) {
2 n8 | ]6 n& Q1 P5 ?$ i7 x/ a& a/ w5 w, \
return true;
1 |2 v: f P; B- w9 Z: L) k5 R+ U0 c: D3 z+ m% t% ^/ Z0 q: A
}
" a8 ~& [9 @3 {& a( k8 t- J- g$ {% D( M: @
}1 }8 W- L- H' d' d( |1 C: s
4 F& `# q8 g' c, F- Q' f* L) `
}
. K; L' G" r D: u
9 ^$ h8 n5 I# X" H return false;
I& {% L. a' N3 q) Z
* b2 J% H; O$ V1 u% Z; K5 u) O }
5 G/ C2 `( W( k
) i4 ?, u( g! T5 `' a/ Z6 ^, `private boolean isValid(char[][] board, String word, int start, int end, int standard, boolean isHorizontal) {
: s: U% l5 k* E: v) O* s% j3 i M6 x' j% \( t0 K/ E/ p! g% W: ^
// 水平放置, standard代表行, 固定不动
* y m/ W" S( A* R! |3 J/ C9 o% J! f% U
if (isHorizontal) {9 |+ }( E8 `7 d5 {6 i
8 b9 E: w( A. w) F if (end > board[0].length - 1) {' h$ Q9 s5 G; l; d! ~* s: _8 L) l4 K8 t; R
+ `9 \8 q) W2 P+ q
return false;
$ U6 j3 o9 U% h- \
1 W' ^' j9 T$ L8 U# t$ L. ] }" _# t& u B( f; o2 z
+ b' I& a: x! H; F
// 如果左边界不越界,检查左边界的元素是否合法; d B" ^6 j; i* F4 ]
: t8 J7 Y! }% O! f
if (start - 1 >= 0 && (board[standard][start - 1] == ' ' || Character.isLetter(board[standard][start - 1]))) {
% ?- J! L9 Q$ E" D, P$ I$ p3 a! Y; c5 e7 U% J- m! q2 ?# E8 w
return false;
& W1 F/ v% |6 d, u2 N8 W% d; H- w; K# Z
}: x6 B& J. _+ l) y2 O; X( p0 G
* W. i0 `, X& B+ K3 K+ G$ }' y
// 如果右边界不越界,检查右边界的元素是否合法+ \2 H- n" H2 z4 a- u, q
5 k/ x) z7 d5 c3 D8 ^
if (end + 1 < board[0].length && (board[standard][end + 1] == ' ' || Character.isLetter(board[standard][end + 1]))) {+ G; i+ [. ?. T( M; l
& S0 A- T4 I9 ?. ~" j6 L return false;
% X; }& T/ Q. {( A" e' }+ i2 d) e$ @5 G! |) D9 k( b
}
7 i' E5 \+ R i
; e1 ]( {, Q' P7 ~1 F$ ~2 t0 E7 v // 至此,它的位置已确认是合法的了
1 i% O% M' a% f7 m9 b q& U/ y4 N
6 \; Q5 l6 t% a# M% L, Q // 接下来,只需要判断 (standard, start) ~ (standard, end) 这个区间 "是否有障碍'#'
4 V3 ? A8 ?4 _+ W! ^' o5 N* l+ e
// 正反都需要判断/ ^0 ]/ e- v5 X/ S% T3 y B
, u; Q: ]5 s6 a) b, Y
return check(board, word, start, end, standard, true, false) || check(board, word, start, end, standard, true, true);
: }: G% B) I8 \ ]+ [! l5 s- d
/ q4 N. P# J0 C- M! R6 e }
8 i# R7 C# M6 F
+ y5 _4 N0 D; l3 O6 j1 o // 垂直放置,standard 代表列, 固定
9 F/ N, i5 ` z% e! ` q& |; j
, u9 M7 c- c8 i% V2 W) }/ P9 A else {
( b9 Y; l1 Y( \ Q4 U: i8 M
9 p& Z, N' P; Y8 Z; h/ P3 A+ ] if (end > board.length - 1) {
: V+ Q% x3 G" Y- D
5 Z+ a: T3 I, r5 y( D4 { return false;, A4 _4 h! @! g3 n: m ^
% |8 E4 ?3 C" ^! I }
& s5 g4 H/ v0 D4 t+ G- e" e
7 G/ E. J7 N+ @8 D/ Y D, ~1 i2 s- ? // 如果上边界不越界,检查上边界的元素是否合法7 m( J$ k9 W/ E: [
9 `3 w! T" B5 Q. s: ~7 @+ e if (start - 1 >= 0 && (board[start - 1][standard] == ' ' || Character.isLetter(board[start - 1][standard]))) {1 n* \" o; R L3 N) l
0 U2 X+ r4 J/ @3 m& I ? return false;) P8 x- C/ k' V8 n! t1 M
' c1 o( q, d1 d X7 R
}
. j# C7 k L" \* m/ H& ]# U
, k9 u2 p+ s- r8 A6 h6 K // 如果下边界不越界,检查下边界的元素是否合法6 o) k; U3 C) ^$ U
" {1 e* h& c5 T3 a0 A, I' U! s if (end + 1 < board.length && (board[end + 1][standard] == ' ' || Character.isLetter(board[end + 1][standard]))) {8 o( a0 N9 T% T7 Q7 ]: F
- R( A# e: r1 ~3 C" G return false;
. `) z0 F. Y/ C: r+ a7 _+ s" Y% Y" F& c/ L* ]
}9 o% ?* ]* t( Q: K. E. s! v
& _& b0 k7 I, G' p' ]) \" u: d7 ` // 至此,它的位置已确认是合法的了+ S* O; z' b0 K. k! V* ~: T
- z* Q2 ?9 S9 j: j2 T
// 接下来,只需要判断 (start, standard) ~ (end, standard) 这个区间 "是否有障碍'#'! c4 e. W1 R% j1 c! j5 t
8 q* V6 c7 s5 w c- C
// 正反都要判断$ Z$ I( V' G, Y+ R+ L' U
2 Q+ J8 S# R7 K6 H, ^/ r
return check(board, word, start, end, standard, false, false) || check(board, word, start, end, standard, false, true); c/ X) }( J7 u! T; D. i
% R1 H! G* Y# C$ k; t4 M8 ?
}5 I8 G3 V* [8 L8 N! a5 b
. n; P( p' k5 Z: _ }' A+ N# {* l; V! b$ a( V. D2 n) B* `
* {/ C- T' L* a$ D5 p0 ?8 Y& I, S& E
private boolean check(char[][] board, String word, int start, int end, int standard, boolean isHorizontal, boolean isReversed) {
" E: }8 Q6 V w# Q) C* A) z$ i
- @" `$ n7 _4 s( h3 l if (isHorizontal) {
* p/ d* X, ]9 h4 s5 e7 s; [; v, F. D& b# Q' |# J$ h
// 正向模拟
: y# G" q8 k5 p6 w+ s c$ _% i
2 l4 M4 Z! O5 w1 @! @# e if (!isReversed) {( y+ {4 x. C% r8 @
& R- e9 B6 W9 e" t
for (int i = start; i <= end; i++) {
+ R/ N+ P* |5 n7 y6 q7 b. R1 ], O, z2 G8 z/ z; p, h
if (board[standard][i] == '#' || (Character.isLetter(board[standard][i]) && board[standard][i] != word.charAt(i - start))) {. C- S* V- G6 J3 n" D, k( H( z
( R9 F* I W+ p* c4 @0 ?
return false;3 A! ]+ A' o: E6 H) F- I
3 Z6 H" R g2 [6 e }" z' v6 y9 P: v# W ?( M
6 F" ~& I( B5 O/ E2 I }3 \0 U: s$ J9 X0 ^* ]% D+ N
0 _& L. @! _1 E8 e+ z! X1 y
}9 B9 ]9 a6 Y( Q! v
6 X1 x2 \7 f$ m/ \ // 反向模拟. B+ k4 L, V7 ?; [" Z, T6 k
5 I, l% O; ?/ R& u/ ~* k
else {
& b! ?; P) e$ e$ H: r7 w
3 c: b& o* j" x% ?$ V; a3 D for (int i = end; i >= start; i--) {
0 ~" z1 h) l. Y/ P1 S+ u4 z }9 S0 d$ l
if (board[standard][i] == '#' || (Character.isLetter(board[standard][i]) && board[standard][i] != word.charAt(end - i))) {
* g# J9 F% q2 Y# U! y/ T
I! |* O& b0 h/ A return false;
9 k0 x; E' G1 k# Z. F: l
2 y8 ]6 R6 V( E }; b" a: L; `: V5 W# B5 |4 s+ t$ k
3 k) s9 p2 ]3 g4 m- m0 N# v/ ] }
+ [4 o5 {; j9 p3 L5 V5 l: j6 g& n1 j
- s4 T! L/ }3 v' T }
3 ?1 R( E5 x+ B5 ^( Z e1 b! J' j B- _% n! d3 e
}
7 c4 s& {5 h/ u# [$ c' t
; A- }9 y0 Q+ g: f+ q4 J else {
4 \3 `* L6 f3 y+ s! d+ v) X/ m. Y& t. X
// 正向模拟
0 ?, Y: T7 n- b8 u% h/ q4 M
' W3 T% I1 b( i1 \8 p8 @6 U. y7 V if (!isReversed) {# J# o4 S4 \* F7 A |7 c5 D
6 u3 s! X( i9 ^2 L3 G' v# y
for (int i = start; i <= end; i++) {# y+ V3 \3 p- S1 n, P
$ Z0 m" l0 W4 }2 f& [ if (board[i][standard] == '#' || (Character.isLetter(board[i][standard]) && board[i][standard] != word.charAt(i - start))) {
& _. T+ I* b& ^3 B+ G1 ?# U
, h6 n; t/ S+ |2 `) Y0 ] return false;' b9 ` C* v N p' A F! [% t
2 J0 q0 a7 E0 s7 w# @: ? }
- U4 y# ~9 l) T; g5 M$ U5 h# ^
0 n4 W/ }/ d) { }4 f# }, ]) Q, w" B6 j6 V, I+ f
6 R% \8 l3 K4 K! o
}0 F Z6 d1 l( X+ }, n
% @' D9 {! j8 K4 V* W0 J; q5 S // 反向模拟
( E3 a, s) t7 f0 A( H H% j5 S! q) y2 \7 u+ E
else {3 z1 V4 [% W* F" p4 v U/ B J: y
" t# n2 k6 ]9 c for (int i = end; i >= start; i--) { Y6 |$ s1 ]! q4 S+ V, B" k0 ~9 D* R
: _* l* R' l' K+ ~/ E. |/ _
if (board[i][standard] == '#' || (Character.isLetter(board[i][standard]) && board[i][standard] != word.charAt(end - i))) {% s( } h5 h; a: y. c% }
2 ]- n' l% y+ a8 e, T2 \+ A7 A return false;7 a2 X1 |3 U9 y! D0 p
\' y6 M/ A2 ~" n- u4 X }
. n8 ~8 h' t; N; }( d: c4 q, J, E4 n) ~2 e' Q: J3 f [, b
}
0 N0 |4 W8 r( p
- d8 ]: f6 y- U: S. N: d9 S+ }! y }/ F8 ^7 q; @9 v4 Y1 Q" Q/ c
, ~6 y! P. g7 R- Q( m$ z$ d* Z% ?: D5 C }
0 w' ~* R- g' d8 d5 N6 T) B6 E( t) @! B; t: x
return true; u! @1 g$ f$ T, m+ t- x
% j0 _; Z8 K6 T. v8 u7 C9 F
}0 |& J" N' W* a) V
* u4 R7 `* k! H9 p; X i2 `3 O2 y
}, Y1 C+ Z! C5 U2 `/ V, l/ S: y
7 H7 s3 v8 h( q: n$ t% ?$ ~3 R
) q9 f7 {. v8 l
【 NO.4 解出数学表达式的学生分数】4 B( {# b9 m7 _2 v( v6 y+ F7 r( Y
6 ]9 |" W3 R7 y$ h1 T解题思路& G/ u9 ]3 w" F
3 B5 ]9 `1 d6 u g- y: b1 R5 t
首先理一理总体的思路,我们需要做的事情有:
9 s' r) p3 L# u- ]! p& k0 `( _1 G7 c
, W5 ?) ^6 a! {) O8 g8 n1. 求出表达式的正确值:Stack的方式解决7 s* O( R' ]% t- {# g* ^
2. 求出表达式所有可能的值:区间型动态规划解决% a% p8 M, O4 \( {9 {9 ?3 n: x) ^+ j
3. 计算学生的得分:计分即可
) W( A* U1 c |9 o代码展示
; e; i; A1 s9 T C
/ k3 D* {, ?5 m# Y. \: Xpublic int scoreOfStudents(String s, int[] answers) {
' b- j( `- V6 L; Y
' b2 l9 v* Q# _( Z: @ int[] count = new int[1024];
) ?( s# M5 J+ |0 Y1 P8 U! _& N8 I: J. z
for (int ans : answers) {6 y/ m! B- w7 w; s& ` O/ H' ]& O
, ]+ [) y/ Z" X4 r8 N count[ans]++;
% b4 g# \! V5 H" B. Y1 W$ L: O1 @% R# [+ |; R
}
8 } d( n9 f5 ?; V" A2 j) i# M% d( U4 }4 Q5 d$ O4 T a0 R
Stack<Integer> stack = new Stack<>();
& f+ m! o! H, M2 K* W# G$ U' H+ s% S2 K9 T" Q& B/ V0 p; V
stack.push(s.charAt(0) - '0');
: f5 `+ j( t2 z K0 [) {8 J5 w/ L6 J. c
for (int i = 1; i < s.length(); i += 2) {
) ], ]' K! W" r3 j
5 ?. N0 h2 K0 R' I L2 ] H // 加法暂时不做,存在栈顶
; a2 t, _, S q% x+ z3 ?# Q* [ {5 j' l8 N) H3 T( m" z
if (s.charAt(i) == '+') {
9 U2 T% ]- t& F7 Y6 f* ^/ c* u$ u9 H9 s. d
stack.push(s.charAt(i + 1) - '0');
, C" u( V( [9 m1 P. i8 }; A; {7 W7 X6 V) m2 p
}
" X0 s. F) x$ T" }* F5 p& T
' U) u+ i: x. G3 R // 乘法直接运算
6 H" @% T; Z+ m, P' e: d7 ~' X$ ] z5 {2 @2 ~
else {
' I/ _8 I) f7 V1 O. P$ Q/ k5 l3 }$ b- m
stack.push(stack.pop() * (s.charAt(i + 1) - '0'));
' \& ^- q$ q( n3 _: Y
/ F) @4 k$ B. b }/ o% Q2 n( ?% M
8 s% p9 A/ B' y) A/ N }5 i1 k0 x0 ]+ _" `3 ]
" j6 t) {# ^# g1 ?/ k5 Z
int rihgtAns = 0;. j4 I* @" `& s: C: b' A
$ h. Z0 N0 S2 k2 A# ]3 \; f8 m
while (stack.size() > 0) {
: H8 u' a2 N1 J+ G/ Y8 }
; ]. K/ t& ^- c x6 E- }- x4 v0 J rihgtAns += stack.pop();
: V8 w" B2 `) }9 N5 a' E; X- _0 a$ P! h6 E1 g0 X
}3 ]: s f' z5 c0 j- a
9 f6 s6 _( C$ x3 e1 D) {; W |% R // 计算正确的人数积分
0 D3 j- ]1 s" M' ^5 a/ S! b& N0 i! M7 Y
+ I M% L$ N% C int res = count[rihgtAns] * 5;: k( m9 ?% e; f/ Z
x- @* [7 ~+ }7 t7 t) ~0 v/ @: L1 u
! p) d1 S% C+ f6 T7 o k
// 枚举所有可能的计算结果
- N9 L R0 q/ D( ~: ~4 L
' v$ y% V4 W3 L ^8 G* a l int n = s.length();6 T1 X5 p' i& x, C# q6 l1 J
& A1 |% {6 w2 C( \+ u( u6 m Set<Integer>[][] dp = new Set[n + 2][n + 2];
! B. D! t; ~6 k% ~$ _- R- T) e& x
( o: V3 c2 ]' f- N7 p' Z! Z$ d for (int i = 0; i < n + 2; i++) {+ z7 e( ~. X" o" E
) z9 k; C+ g2 \% [- H+ Q) ~ for (int j = 0; j < n + 2; j++) {
1 ^8 v9 A( M1 l o# J% {. J9 F: ^( l4 ?' \+ r5 N8 E
dp[i][j] = new HashSet<>();, A: x9 q4 @3 l. z- b; l8 p
! F, S' F: r3 F! P) h6 C
}: c2 { q/ X+ t% W
( x8 k, i7 U2 n D }. F! `/ b0 n/ ^% @( x
2 D3 M! v( Z7 q Z; K* }3 k4 l
for (int j = 0; j < n; j += 2) {
! N$ f$ j9 D: U3 ^3 D) [2 Q0 _* e+ N4 z- |# S! `
dp[j][j].add(s.charAt(j) - '0');! S1 V4 K( e. y3 o9 v7 N
% j- \6 h' X$ m& d3 B/ W }
" s2 W+ O r1 |% W
7 f$ d0 j0 a; u& E, b // 区间型动态规划
/ A# a" u. y$ \1 N* r3 v* h y
1 S, S& b) o. f for (int len = 2; len < n; len++) {
2 b; P' `& v( ~! a: Y
5 p( c4 @5 s8 [6 @) t8 t // 左端点 i
7 Z' y# j+ T6 ?3 t5 W, Q. [$ E# f) r- l
for (int i = 0; i + len < n; i += 2) {
/ G3 J" H" Y" n! n* [
2 u# L8 k/ |' J% ]4 e+ l // 枚举左半部分的长度; b* F% r+ e, d' R% o! H3 p
7 `! E' _7 P& v for (int leftLen = 0; leftLen < len; leftLen += 2) {% O( u0 v7 n6 X- ~) q/ R% X
2 T2 y5 @% \+ y0 b) V% _ // left 表示左半部分的值, R4 i- k I) j# a. i
- D) V% L: N9 {, g& ~9 b& y) P // right 表示右半部分的值
3 F8 Y' v" v6 N. m4 d9 n
( D, G+ s3 s; _$ P1 L0 [+ Q$ S1 |4 ~ for (int left : dp[i][i + leftLen]) {3 m8 V9 r& a2 ^) I
4 ?1 l+ x) u# O' _
for (int right : dp[i + leftLen + 2][i + len]) {1 I0 ?1 t( H( R+ I3 d$ e
! ^. c! X! v6 l5 g- ` if (s.charAt(i + leftLen + 1) == '+') {
; t) w" r( b( i6 z8 ]7 q% Q+ Y8 |5 y7 r
if (left + right <= 1000) {
0 }" q( p8 f L; B/ R. a$ F5 W6 C3 R+ F7 G# h# M" ]7 b2 c- h
dp[i][i + len].add(left + right);% R/ q2 I5 a) {
$ A3 m$ l3 }9 J+ u! }$ x0 U }% y3 l6 S: q" T0 d7 Z
9 ~: P/ R* ^5 E7 F6 \! Q } else {
3 ^( `# C' J2 h7 x8 R( ]3 q7 f* t4 M' Q( I) g' v u
if (left * right <= 1000) {
! K$ L4 F& B2 H6 E4 `0 A$ A/ O5 @3 }* o
dp[i][i + len].add(left * right);' s! A2 [$ T7 o/ c6 J3 I) e( Q
# `1 P5 S( E- \9 Y a }6 \5 Q# P) a7 t
7 G; J" a: p# s) K }3 f3 d* ]$ `+ N
7 D- d5 z D) u5 e* O4 w }
Q' I4 m: m( j/ H2 e: w
n0 q. Q$ l& Y }
' A% h5 O2 }- ^4 J/ M2 \, ]- ~1 G- i7 ~0 A" v
}, z7 H8 p! R$ q% _0 K. \
& Z( B' d2 k3 [/ k! N
}1 {4 V/ Z% j- y
: {+ H/ [* r" e) D" p8 \0 F }
- y/ K5 Y/ g3 z. Y* ~8 I( |6 R: }# o' q% {$ d, @
" `$ ^1 O8 T$ o: @/ n: R7 Y5 O: q- Y, o4 y0 a8 A! C& v( z! V
for (int points : dp[0][n - 1]) {: K* ^: J& c" X, v8 o
7 x7 C& \0 [. {7 c- A `7 A8 ~
if (points != rihgtAns) { U9 e" _8 h* i0 A
- ~# n$ O# M9 H! J* A$ f9 O O
res += 2 * count[points];; f k; @! \5 U/ l7 b
3 Z6 O; Q) _6 l8 J" y2 U0 q; h C }) W5 e9 x; h1 Y3 G' I
: g4 N1 d- g1 a
}2 f, J2 _" X( y4 g; }* ~) r2 s4 S
7 g# ~' L; o3 ~4 h return res;0 x6 j+ z$ p m
o: H$ R8 k; O/ b; z6 q& @
} |