地址:
力扣https://leetcode-cn.com/problems/swap-numbers-lcci/
题目:
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:
输入: numbers = [1,2] 输出: [2,1] |
提示:
numbers.length == 2 -2147483647 <= numbers[i] <= 2147483647 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-numbers-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
巧用 ^ 运算符
这里有两个重要的定律
1. n ^ n = 0 因为 n 的每一位 ^ 相同的每一位
2. n ^ 0 = n 因为 1 ^ 0 = 1 , 0 ^ 0 = 0 无论位是 1 或 0 ,最后还是 1 或 0
另外 ^ 运算符满足 交换律 和 结合律
方法一、^ 运算符
a=a^b b=a^b=(a^b)^b=a^(b^b)=a^0=a a=a^b=(a^b)^b=(a^a)^b=0^b=b |
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* swapNumbers(int* numbers, int numbersSize, int* returnSize){
numbers[0] = numbers[0] ^ numbers[1];
numbers[1] = numbers[0] ^ numbers[1];
numbers[0] = numbers[0] ^ numbers[1];
*returnSize = 2;
return numbers;
}