难度:简单
未知 整数数组 arr 由 n 个非负整数组成。
经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。
给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。
请解码返回原数组 arr 。可以证明答案存在并且是唯一的。
来源:力扣(LeetCode)
思路:状态模拟异或过程,得到表达式 arr[i]=arr[i-1]^encoded[i-1](可以通过两个数异或得到的数与原来其中的一个数进行异或操作,得到原来其中的另一个数)
状态模拟的过程:
// [1,0,2] //已知1
// [0,2,1]
// [1,2,3]
// 1001 arr[i]
// 0101 arr[i+1]
// 1100 encoded[i]
// 1001
// i 从1开始
实质就是位运算的性质
a^a=0; a^0=a;
b^c=a;
b^c^c=a^c
-> b=a^c
代码
class Solution {
public int[] decode(int[] encoded, int first) {
int[]arr=new int[encoded.length+1];
arr[0]=first;
for(int i=1;i<arr.length;i++){
arr[i]=arr[i-1]^encoded[i-1];
}
return arr;
}
}