异或运算的性质:
任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的数字全部在异或中抵消掉了。
例题:
编写一个函数,不用临时变量,直接交换numbers = [a, b]
中a
与b
的值。
输入: numbers = [1,2] 输出: [2,1]
class Solution {
public:
vector<int> swapNumbers(vector<int>& numbers) {
numbers[0] ^= numbers[1];
numbers[1] ^= numbers[0];
numbers[0] ^= numbers[1];
return numbers;
}
};
分析:对于这个例子来说,
在第一个式子中1^2得3
第二个式子相当于1^2^1 则留下了2存为numbers[1]
第三个式子2^3异或得1