题目及测试样例:

题目链接:面试题 16.01. 交换数字 - 力扣(LeetCode)
https://leetcode.cn/problems/swap-numbers-lcci/description/
★划重点:
如果不设置临时变量,可以采用异或运算的性质:两个数a和b:a^a=0,0^a=a来计算本题
思路:将需要交换的两个值a与b先做好原始数据的标记①与②【不需要写进代码里面,但是自己得心里得清楚,否则会绕进死胡同里面导致算错】,之后进行一系列异或运算,每一步计算都将式子化简为包含①和②的表达式,再进行约分,就可以实现交换a与b了
提交代码:
cpp
class Solution {
public:
vector<int> swapNumbers(vector<int>& a) {
//如果不设置临时变量,可以采用异或运算的性质:两个数a和b:a^a=0,0^a=a来计算本题
//【a[0]值为①】
//【a[1]值为②】//当且仅当a[0]=a[1]时①=②,本题就是要交换①和②的值:将【a[0]值为②】,【a[1]值为①】
a[0]=a[0]^a[1];//此时的a[0]值为③,这个③和上面的①含义不同
a[1]=a[1]^a[0];//将式子拆成最初的①和②来计算:【a[1]=a[1]^a[0]=a[1]^a[0]^a[1]=0^a[0]=a[0] 此时的【a[1]=a[0],这个地方的a[0]说的是①,将①的值赋值给a[1];】
a[0]=a[0]^a[1];//将式子拆成最初的①和②来计算:【a[0]=a[0]^a[1]=a[0]^a[1]^a[0]=0^a[1]=a[1] 此时的【a[0]=a[1],这个地方的a[1]说的是②,将②的值赋值给a[0]; 】
return a;
}
};