先了解:若x^y=z,则
则有x=y^z,于是只需要知道perm的第一个元素值,就可通过循环
res[i]=res[i-1]^encoded[i-1]得到答案,要知道perm的第一个元素,可将perm元素看作[A,B,C,D,E],encoded元素看作[AB,BC,CD,DE],可通过ABCDE异或BCDE得到元素A的值,于是总代码如下:
class Solution {
public int[] decode(int[] encoded) {
int n=encoded.length+1;
int[] res=new int[n];
int ABCDE=0,BCDE=0;
for(int i=1;i<=n;i++){
ABCDE^=i;
}
for(int i=1;i<encoded.length;i+=2){
BCDE^=encoded[i];
}
res[0]=ABCDE^BCDE;
for(int i=1;i<n;i++){
res[i]=res[i-1]^encoded[i-1];
}
return res;
}
}
思路来自:https://leetcode-cn.com/problems/decode-xored-permutation/solution/ji-shuang-yi-wen-dai-ni-shua-liang-dao-j-mujs/