Date and Time: Nov 18, 2024, 13:32 (EST)
Link: https://leetcode.com/problems/defuse-the-bomb/
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 theith
number with the sum of the nextk
numbers. -
If
k < 0
, replace theith
number with the sum of the previousk
numbers. -
If
k == 0
, replace theith
number with0
.
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!
Example 1:
Input: code = [5,7,1,4], k = 3
Output: [12,10,16,13]
Explanation: Each number is replaced by the sum of the next 3 numbers. The decrypted code is [7+1+4, 1+4+5, 4+5+7, 5+7+1]. Notice that the numbers wrap around.
Example 2:
Input: code = [1,2,3,4], k = 0
Output: [0,0,0,0]
Explanation: When k is zero, the numbers are replaced by 0.
Example 3:
Input: code = [2,4,9,3], k = -2
Output: [12,5,6,13]
Explanation: The decrypted code is [3+9, 2+3, 4+2, 9+4]. Notice that the numbers wrap around again. If k is negative, the sum is of the previous numbers.
-
n == code.length
-
1 <= n <= 100
-
1 <= code[i] <= 100
-
-(n - 1) <= k <= n - 1
Identify k
is greater, equal, or less than 0
. If k == 0
, we change all code[i]
to be 0
.
If k > 0
: we use %
to get the correct index. If we start at the last index i = 3
, we create a variable curr = 3
and get the first element by (curr + 1) % len(code) = 4 % 4 = 0
, and we increment the curr
to get the rest elements and append the curSum
to res[]
.
For k < 0
, we use (len(code) + curr) % len(code)
to get the correct index, because in this case we are taking the sum of k
previous numbers. So, if we start at the last index i = 0
and curr = 0 - 1 = -1
(we don't include current index), we can get the previous element by (len(code) + curr) % len(code) = (4 + -1) % 4 = 3 % 4 = 3
, we then decrement curr
to get all the other sum.
class Solution:
def decrypt(self, code: List[int], k: int) -> List[int]:
# If k > 0: curr % len(code), curr += 1
# If k == 0, replace every ith to be 0
# If k < 0: (len(code) + curr) % len(code), curr -= 1
# TC: O(n), n = len(code), SC: O(n)
res = []
for i in range(len(code)):
curr, curSum = i, 0
if k == 0:
res.append(0)
else:
for _ in range(abs(k)):
if k > 0:
curr += 1
index = curr % len(code)
else:
curr -= 1
index = (len(code) + curr) % len(code)
curSum += code[index]
res.append(curSum)
return res
Time Complexity: n = len(code)
, for each element in code
, we run
Space Complexity: