Back to all solutions

#1734 - Decode XORed Permutation

Problem Description

There is an integer array perm that is a permutation of the first n positive integers, where n is always odd.

It was encoded into another integer array encoded of length n - 1, such that encoded[i] = perm[i] XOR perm[i + 1]. For example, if perm = [1,3,2], then encoded = [2,1].

Given the encoded array, return the original array perm. It is guaranteed that the answer exists and is unique.

Solution

/**
 * @param {number[]} encoded
 * @return {number[]}
 */
var decode = function(encoded) {
  const n = encoded.length + 1;
  let totalXor = 0;
  for (let i = 1; i <= n; i++) {
    totalXor ^= i;
  }

  let oddXor = 0;
  for (let i = 1; i < encoded.length; i += 2) {
    oddXor ^= encoded[i];
  }

  const result = new Array(n);
  result[0] = totalXor ^ oddXor;

  for (let i = 0; i < n - 1; i++) {
    result[i + 1] = result[i] ^ encoded[i];
  }

  return result;
};