方法一 异或运算的性质
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;
};
消耗时间和内存情况: