题目如下:
You have a bomb to defuse, and your time is running out! Your informer will provide you with a circular array
code
of length ofn
and a keyk
.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 ofcode[n-1]
iscode[0]
, and the previous element ofcode[0]
iscode[n-1]
.Given the circular array
code
and an integer keyk
, 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.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