题目来源
题目描述
题目解析
位运算
class Solution {
public int[] swapNumbers(int[] numbers) {
numbers[0] ^= numbers[1];
numbers[1] ^= numbers[0];
numbers[0] ^= numbers[1];
return numbers;
}
}
- 问: 为什么^可以交换两个数
x = x ^ y;
y = x ^ y;
x = x ^ y;
- 答:两个相同的数异或之后结果会等于 0,即 n ^ n = 0。并且任何数与 0 异或等于它本身,即 n ^ 0 = n。所以,解释如下:
把(1)中的 x 带入 (2)中的 x,有
y = x^ y = (x^ y)^ y = x^ (y^ y) = x^0 = x。 x 的值成功赋给了 y。
对于(3),推导如下:
x = x^y = (x^y)^x = (x^x)^y = 0^y = y。
异或满足交换律 结合律
解析2
class Solution {
public int[] swapNumbers(int[] numbers) {
numbers[1] = numbers[0] + numbers[1];
numbers[0] = numbers[1] - numbers[0];
numbers[1] = numbers[1] - numbers[0];
return numbers;
}
}