方法一 异或运算的性质
encoded[i−1]=arr[i−1]⊕arr[i] 在等式两边同时异或arr[i−1] 由于:
-
一个数异或它自己,结果总是0。
-
0异或任何数,结果都是那个数本身。
所以等式可以转化为:
arr[i]=arr[i−1]⊕encoded[i−1]
由于 arr[0]=first已知,因此对 i从 1到 n−1依次计算 arr[i] 的值,即可解码得到原数组arr。
var decode = function(encoded, first) {const n = encoded.length + 1;const arr = new Array(n).fill(0);arr[0] = first;for (let i = 1; i < n; i++) {arr[i] = arr[i - 1] ^ encoded[i - 1];}return arr;
};
消耗时间和内存情况: