题目:
代码及注释
class Solution {
public://此题和之前的异或解码及其类似,但是并未给出first数据,所以无法直接得出结果。
//我们的思路就是先得出first数据,而后就能解码了,根据题目的含义,由于perm数组是一个前n个正整数的排列,
//所以我们虽不知道排列的具体顺序,但是我们可以知道所有元素的异或结果,通过这个结果我们可以得到第一个元素first。
//那么如何得到呢?我手写了一张图,就在下面。
vector<int> decode(vector<int>& encoded) {
//获取原数组的个数
int n = encoded.size()+1;
int temp1 = 0;
for(int i=1;i<=n;i++)
temp1 ^= i;
int temp2 = 0;
//通过与偶数项encoded数组的异或得到first
for(int i=1;i<n-1;i+=2){
temp2 ^= encoded[i];
}
int first = temp1^temp2;
//最后通过first异或解码
vector<int>perm;
perm.emplace_back(first);
for(int i=0;i<n-1;i++){
first ^= encoded[i];
perm.emplace_back(first);
}
return perm;
}
};