Skip to content

Commit 589955a

Browse files
committed
feat: add ts solution to lc problem: No.1652
No.1652.Defuse the Bomb
1 parent e238b77 commit 589955a

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

solution/1600-1699/1652.Defuse the Bomb/README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,42 @@ func decrypt(code []int, k int) []int {
282282
}
283283
```
284284

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+
285321
### **...**
286322

287323
```

solution/1600-1699/1652.Defuse the Bomb/README_EN.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,42 @@ func decrypt(code []int, k int) []int {
240240
}
241241
```
242242

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+
243279
### **...**
244280

245281
```
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}

0 commit comments

Comments
 (0)