1. 题目
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:
输入: numbers = [1,2]
输出: [2,1]
提示:
numbers.length == 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-numbers-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 首先异或运算跟次序无关
a^a = 0, 0^a=a
a ^= b ^= a ^= b
- 从右往左一个个的看
- 第一个,
a = a^b
,b = b
- 第二个,
b = b^(a^b)=a
,a=a^b
- 第三个,
a = (a^b)^a = b
- 可以看到最后a,b的值互换了
class Solution {
public:
vector<int> swapNumbers(vector<int>& n) {
n[0] ^= n[1] ^= n[0] ^= n[1];
return n;
}
};