前往
大廳
主題

LeetCode - 1652. Defuse the Bomb 解題心得

Not In My Back Yard | 2023-02-13 12:00:05 | 巴幣 0 | 人氣 141

題目連結:


題目意譯:
你現在有一顆炸彈要拆除,而時間所剩無幾!你的線人將會提供你一個長度 n 的環形陣列 code 以及一個關鍵號碼 k。

為了將 code 解密,你必須替換掉所有數字。所有數字將同時被替換。
如果 k > 0,則將第 i 個數字替換成前 k 個數字的總和。
如果 k < 0,則將第 i 個數字替換成後 k 個數字的總和。
如果 k == 0,則將第 i 個數字替換成 0。

由於 code 為環形的,因此 code[n - 1] 的下一個元素為 code[0],而 code[0] 的前一個元素為 code[n - 1]。

給定環形陣列 code 以及一整數關鍵號碼 k,回傳解密後的 code 並拆除炸彈!

限制:
n == code.length
1 ≦ n ≦ 100
1 ≦ code[i] ≦ 100
-(n - 1) ≦ k ≦ n - 1



範例測資:
範例 1:
輸入: code = [5,7,1,4], k = 3
輸出: [12,10,16,13]
解釋: 每個數字都被替換成下 3 個數字的總和。解密後的 code 為 [7+1+4, 1+4+5, 4+5+7, 5+7+1]。注意到陣列中的數字頭尾是相連的。

範例 2:
輸入: code = [1,2,3,4], k = 0
輸出: [0,0,0,0]
解釋: 當 k 是 0 的時候,所有數字將替換成 0。

範例 3:
輸入: code = [2,4,9,3], k = -2
輸出: [12,5,6,13]
解釋: 解密後的 code 為 [3+9, 2+3, 4+2, 9+4]。注意到陣列中的數字頭尾一樣是相連的。如果 k 是負數,總和為前面的數字。


解題思維:
因為這題的 k 值不大(如果 k 比較大的時候,則需要利用滑動視窗(Sliding Window)的技巧,如這題),因此我們可以直接對每個位置求前 k(或後 k)個元素之總和。

而往前(或後)的時候的索引值可以利用「%」(取餘)運算子來模擬出「數字頭尾相連」的性質。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作