问题:
给你两个整数,比如 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;
这两种方法最好选用第一种,因为第二种会有溢出的情况发生。
本文介绍了一种在不使用额外空间的情况下,通过异或操作交换两个整数值的方法。提供了两种实现方式,并指出了一种方法可能会导致溢出的问题。
806

被折叠的 条评论
为什么被折叠?



