题目:
思路:
假设原数组perm=[a,b,c,d,e],n=5;异或后编码数组encoded=[A,B,C,D]。
那么A=a^b B=b^c C=c^d D=d^e。
又因为perm是由前n个正整数构成的随机顺序的数组,则perm的全部元素异或结果是已知的,x=1^ 2 ^ 3 ^ 4 ^5 = perm[0]^ perm[1] ^ perm[2] ^ perm[3] ^perm[4].
其中perm[1] ^ perm[2]=B=encoded[1],perm[3] ^ perm[4]=D=encoded[3]
所以x=perm[0] ^ encoded[1] ^ encoded[3];
根据异或的性质可得:perm[0] = x ^ encoded[1] ^ encoded[3]
可以得到perm数组的第一个元素,那之后的元素就是一个递推的关系。
代码:
class Solution {
public:
vector<int> decode(vector<int>& encoded) {
int n = encoded.size()+1;
vector<int> res(n);
int x = 0;
for(int i=1;i<=n;i++){
x^=i;
}
for(int i=1;i<n;i+=2){
x^=encoded[i];
}
res[0]=x;
for(int i=0;i<n-1;i++){
res[i+1]=res[i]^encoded[i];
}
return res;
}
};