1720. 解码异或后的数组
思路
这里主要用了异或的性质。
- 两个相同的数做异或结果为 0
- 0 与 任何数异或都是他本身
- 满足交换律
对于原式 encoded[i] = arr[i] ^ arr[i + 1]
,两边同时异或 arr[i]
得:
arr[i] ^ encoded[i] = arr[i] ^ arr[i + 1] ^ arr[i]
运用性质 3,交换 arr[i]
和 arr[i + 1]
得:
arr[i] ^ encoded[i] = arr[i + 1] ^ arr[i] ^ arr[i]
运用性质 1,得:
arr[i] ^ encoded[i] = arr[i + 1] ^ 0
运用性质 2,得:
arr[i] ^ encoded[i] = arr[i + 1]
即 arr[i + 1] = arr[i] ^ encoded[i]
代码
class Solution {
public:
vector<int> decode(vector<int>& encoded, int first) {
vector<int> res;
res.push_back(first);
for (int i = 1; i <= encoded.size(); i++) {
res.push_back(res[i - 1] ^ encoded[i - 1]);
}
return res;
}
};