File tree Expand file tree Collapse file tree 3 files changed +103
-0
lines changed
solution/1600-1699/1652.Defuse the Bomb Expand file tree Collapse file tree 3 files changed +103
-0
lines changed Original file line number Diff line number Diff line change @@ -282,6 +282,42 @@ func decrypt(code []int, k int) []int {
282
282
}
283
283
```
284
284
285
+ ### ** TypeScript**
286
+
287
+ ``` ts
288
+ function decrypt(code : number [], k : number ): number [] {
289
+ const n = code .length ;
290
+ if (k === 0 ) {
291
+ return code .fill (0 );
292
+ }
293
+ const isPrefix = k < 0 ;
294
+ if (isPrefix ) {
295
+ k *= - 1 ;
296
+ }
297
+ const map = new Map <number , [number , number ]>();
298
+ let prefix = 0 ;
299
+ let suffix = 0 ;
300
+ for (let i = 1 ; i <= k ; i ++ ) {
301
+ prefix += code [n - i ];
302
+ suffix += code [i ];
303
+ }
304
+ map .set (0 , [prefix , suffix ]);
305
+
306
+ for (let i = 1 ; i < n ; i ++ ) {
307
+ let [p, s] = map .get (i - 1 );
308
+ p -= code [n - k - 1 + i ] ?? code [i - k - 1 ];
309
+ p += code [i - 1 ];
310
+ s -= code [i ];
311
+ s += code [i + k ] ?? code [i + k - n ];
312
+ map .set (i , [p , s ]);
313
+ }
314
+ for (let i = 0 ; i < n ; i ++ ) {
315
+ code [i ] = map .get (i )[Number (! isPrefix )];
316
+ }
317
+ return code ;
318
+ }
319
+ ```
320
+
285
321
### ** ...**
286
322
287
323
```
Original file line number Diff line number Diff line change @@ -240,6 +240,42 @@ func decrypt(code []int, k int) []int {
240
240
}
241
241
```
242
242
243
+ ### ** TypeScript**
244
+
245
+ ``` ts
246
+ function decrypt(code : number [], k : number ): number [] {
247
+ const n = code .length ;
248
+ if (k === 0 ) {
249
+ return code .fill (0 );
250
+ }
251
+ const isPrefix = k < 0 ;
252
+ if (isPrefix ) {
253
+ k *= - 1 ;
254
+ }
255
+ const map = new Map <number , [number , number ]>();
256
+ let prefix = 0 ;
257
+ let suffix = 0 ;
258
+ for (let i = 1 ; i <= k ; i ++ ) {
259
+ prefix += code [n - i ];
260
+ suffix += code [i ];
261
+ }
262
+ map .set (0 , [prefix , suffix ]);
263
+
264
+ for (let i = 1 ; i < n ; i ++ ) {
265
+ let [p, s] = map .get (i - 1 );
266
+ p -= code [n - k - 1 + i ] ?? code [i - k - 1 ];
267
+ p += code [i - 1 ];
268
+ s -= code [i ];
269
+ s += code [i + k ] ?? code [i + k - n ];
270
+ map .set (i , [p , s ]);
271
+ }
272
+ for (let i = 0 ; i < n ; i ++ ) {
273
+ code [i ] = map .get (i )[Number (! isPrefix )];
274
+ }
275
+ return code ;
276
+ }
277
+ ```
278
+
243
279
### ** ...**
244
280
245
281
```
Original file line number Diff line number Diff line change
1
+ function decrypt ( code : number [ ] , k : number ) : number [ ] {
2
+ const n = code . length ;
3
+ if ( k === 0 ) {
4
+ return code . fill ( 0 ) ;
5
+ }
6
+ const isPrefix = k < 0 ;
7
+ if ( isPrefix ) {
8
+ k *= - 1 ;
9
+ }
10
+ const map = new Map < number , [ number , number ] > ( ) ;
11
+ let prefix = 0 ;
12
+ let suffix = 0 ;
13
+ for ( let i = 1 ; i <= k ; i ++ ) {
14
+ prefix += code [ n - i ] ;
15
+ suffix += code [ i ] ;
16
+ }
17
+ map . set ( 0 , [ prefix , suffix ] ) ;
18
+
19
+ for ( let i = 1 ; i < n ; i ++ ) {
20
+ let [ p , s ] = map . get ( i - 1 ) ;
21
+ p -= code [ n - k - 1 + i ] ?? code [ i - k - 1 ] ;
22
+ p += code [ i - 1 ] ;
23
+ s -= code [ i ] ;
24
+ s += code [ i + k ] ?? code [ i + k - n ] ;
25
+ map . set ( i , [ p , s ] ) ;
26
+ }
27
+ for ( let i = 0 ; i < n ; i ++ ) {
28
+ code [ i ] = map . get ( i ) [ Number ( ! isPrefix ) ] ;
29
+ }
30
+ return code ;
31
+ }
You can’t perform that action at this time.
0 commit comments