问题:
给你两个整数,比如 a = 10, b = 20,在不占用任何额外空间的条件下交换两个数的值。
思路:
首先,问题看起来是挺不可思议,但是也是挺有趣的。既然不能占用任何空间,只能在已有的变量上打主意。这里有两个方法,看完代码自己就能马上明白,所以就不多解释了。
方法1:
int a = 10;
int b = 20;
a = a^b;
b = b^a;
a = a^b;
这个方法用到了一个事实:任何数自己和自己异或(XOR)后等于0.
方法2:
int a = 10;
int b = 20;
a = a + b;
b = a - b;
a = a - b;
这两种方法最好选用第一种,因为第二种会有溢出的情况发生。