一般人完成两数交换都会使用一个额外的空间temp来暂存一个数的值,之后进行两数交换,即:
public void swap(int[] arr, int a, int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = arr[a];
}
其实还有另外一个方法来实现两数的交换,即使用异或运算符的方法。
我们知道,在二进制中异或运算的规则如下:
a | b | Output |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
即两数相同则输出0,两数不同则输出1。因此,我们可以得到一个结论:任意一个数,连续异或同一个数两次,还等于这个数。
如:10001 ^ 11100 ^ 11100 = 10001
所以,我们可以得到异或运算完成两数数值交换的代码:
public void swap(int[] arr, int a, int b){
arr[a] = arr[a] ^ arr[b];
arr[b] = arr[a