題目連結:
題目意譯:
現在有一個隱藏的整數陣列 arr,其由 n 個非負整數組成。
該陣列被加密成另一個長度 n - 1 的陣列,使得 encoded[i] = arr[i] XOR arr[i + 1]。例如說,如果 arr = [1,0,2,1],則 encoded = [1,2,3]。
你被給定加密後的陣列 encoded。你同時也被給定一整數 first,其為 arr 的第一個元素,即 arr[0]。
回傳原始的陣列 arr。可以證明答案存在且唯一。
限制:
2 ≦ n ≦ 10 ^ 4
encoded.length == n - 1
0 ≦ encoded[i] ≦ 10 ^ 5
0 ≦ first ≦ 10 ^ 5
範例測資:
範例 1:
輸入: encoded = [1,2,3], first = 1
輸出: [1,0,2,1]
解釋: 如果 arr = [1,0,2,1],則 first = 1 且 encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]
範例 2:
輸入: encoded = [6,2,7,3], first = 4
輸出: [4,2,0,7,4]
解題思維:
先宣告出長度為 n(即 encoded.length + 1)的陣列 arr。而 arr[0] 之值為 first。
而剩下的位置,我們只需從 arr[1] 開始掃到 arr[n - 1],期間把 arr[i] 之值設為 encoded[i - 1] XOR arr[i - 1] 即可(因為 XOR 之操作滿足,X XOR Y XOR Y = X,也就是再做一次同樣的 XOR 將會「復原」原先的操作)。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。