-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy path1652-defuse-the-bomb.js
44 lines (39 loc) · 1.25 KB
/
1652-defuse-the-bomb.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* 1652. Defuse the Bomb
* https://leetcode.com/problems/defuse-the-bomb/
* Difficulty: Easy
*
* You have a bomb to defuse, and your time is running out! Your informer will provide you with
* a circular array code of length of n and a key k.
*
* To decrypt the code, you must replace every number. All the numbers are replaced simultaneously.
* - If k > 0, replace the ith number with the sum of the next k numbers.
* - If k < 0, replace the ith number with the sum of the previous k numbers.
* - If k == 0, replace the ith number with 0.
*
* As code is circular, the next element of code[n-1] is code[0], and the previous element of
* code[0] is code[n-1].
*
* Given the circular array code and an integer key k, return the decrypted code to defuse the bomb!
*/
/**
* @param {number[]} code
* @param {number} k
* @return {number[]}
*/
var decrypt = function(code, k) {
const n = code.length;
const result = new Array(n).fill(0);
if (k === 0) return result;
const isPositive = k > 0;
const steps = Math.abs(k);
for (let i = 0; i < n; i++) {
let sum = 0;
for (let j = 1; j <= steps; j++) {
const index = isPositive ? (i + j) % n : (i - j + n) % n;
sum += code[index];
}
result[i] = sum;
}
return result;
};