【leetcode】1652. Defuse the Bomb
阿新 • • 發佈:2021-06-25
題目如下:
You have a bomb to defuse, and your time is running out! Your informer will provide you with acirculararray
code
of length ofn
and a keyk
.To decrypt the code, you must replace every number. All the numbers are replacedsimultaneously.
- If
k > 0
, replace theith
number with the sum of thenextk
numbers.- If
k < 0
, replace theith
number with the sum of thepreviousk
numbers.- If
k == 0
, replace theith
number with0
.As
code
is circular, the next element ofcode[n-1]
iscode[0]
, and the previous element ofcode[0]
iscode[n-1]
.Given thecirculararray
code
and an integer keyk
, returnthe 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.Constraints:
n == code.length
1 <= n<= 100
1 <= code[i] <= 100
-(n - 1) <= k <= n - 1
解題思路:很簡單的題目。
程式碼如下:
class Solution(object): def decrypt(self, code, k): """ :type code: List[int] :type k: int :rtype: List[int] """ if k == 0:return [0] * len(code) ori_len = len(code) code_refactor = code * 2 if k > 0: for i in range(ori_len): code[i] = sum(code_refactor[i+1:i+1+k]) return code else: k = -k for i in range(ori_len,len(code_refactor)): code[i - ori_len] = sum(code_refactor[i-k:i]) return code