编写一个函数,不用临时变量,直接交换numbers = [a, b]
中a
与b
的值。
示例:
输入: numbers = [1,2] 输出: [2,1]
提示:
numbers.length == 2
这是一道看起来非常简单但是我觉得也非常启迪思维的题目
方法一:数学计算
//此方法要充分考虑到溢出的情况
vector<int> swapNumbers(vector<int>& numbers) { if((numbers[0]<=0&&numbers[1]<=0)||(numbers[0]>=0&&numbers[1]>=0)) { numbers[0]=numbers[0]-numbers[1]; numbers[1]=numbers[1]+numbers[0]; numbers[0]=numbers[1]-numbers[0]; } else { numbers[0]=numbers[0]+numbers[1]; numbers[1]=numbers[0]-numbers[1]; numbers[0]=numbers[0]-numbers[1]; } return numbers; }
方法二:异或运算
//一个数与自己异或为0,一个数与0异或不变。这种特殊性质使得异或运算对于特定类型的题目有奇效,比如求数组中出现次数为2的元素
vector<int> swapNumbers(vector<int>& numbers) { numbers[0] ^= numbers[1]; numbers[1] ^= numbers[0]; numbers[0] ^= numbers[1]; return numbers; }