题目:
给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。
它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。
给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。
思路:
A^B ^A=B
A^B ^B=A
利用上述公式,我们可先求出perm中所有值的异或结果total。再利用encoded数组的奇数项(encoded[1],encoded[3]…)来求出perm中除第一项外,其他值的异或结果odd。最后,perm[0]=total^odd。得到第一项后,按序求解即可。
解答:
class Solution:
def decode(self, encoded: List[int]) -> List[int]:
n = len(encoded) + 1
total=1
for i in range(2,n+1):
total^=i
odd = 0
for i in range(1, n - 1, 2):
odd ^= encoded[i]
perm = [total ^ odd]
for i in range(n - 1):
perm.append(perm[-1] ^ encoded[i])
return perm