LeetCode题目,5649. Decode XORed Array
先看题目描述
大意就是有一个数组 arr 由 n 个整数构成,将 arr 编码后得到长度为 n - 1 的 encoded 数组,编码规则为 encoded[i] = arr[i] XOR arr[i+1],现在给定编码后得到的 encoded 数组和 arr 数组的第一个元素 first,让我们求出 arr 数组并返回
算法和思路
这题一开始不知道怎么做,后来在草稿纸上试了下,发现了异或的性质,才意识到这题确实很简单
首先异或的计算规则是两数相同得 0,不同得 1。异或还存在如下性质:
- 异或存在结合律和交换律
- a ^ a = 0
- a ^ 0 = a
- 由前三个性质,可以推出若 a ^ b = c,则有 a ^ c = b
最后一个性质的推导如下:若 a ^ b = c,则 a ^ c = a ^ (a ^ b) = (a ^ a) ^ b = 0 ^ b = b
只要发现了异或的最后这个性质,这题就迎刃而解了
算法源码
1 | class Solution { |