如何不用额外变量交换两个数
这个问题如果问怎么交换两个数,那很简单,大家都会
int a ,b ,temp;
temp = a;
a = b ;
b = temp;
但是不用额外变量,这一下子还真不到怎么做?那异或运算就可以做到,是不是很神奇,我们先看实现代码
public class XOR {
public static void main(String[] args) {
int a = 10, b = 20;
System.out.println("original value a:" + a + " b:" + b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("After change value a:" + a + " b:" + b);
}
}
你没看错,就是这三行代码,就能做到,给大家看下运行结果
Original value a:10 b:20
After change a:20 b:10
那这个运算的原理是什么呢?我们用上面异或运算的几个性质来解释下:
⚠️注意
使用这种方式交换的前提是,两个变量不能指向同一个内存地址,那样异或之后为结果为0
public class XOR {
public static void main(String[] args) {
int[] arr = {1,2,3};
int i = 0,j = 1;
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
System.out.println(arr[i] + "," + arr[j]);
int m = 0,n = 0;
arr[m] = arr[m] ^ arr[n];
arr[n] = arr[m] ^ arr[n];
arr[m] = arr[m] ^ arr[n];
System.out.println(arr[m] + "," + arr[n]);
}
}
2,1
0,0
其他题目合集见文档: www.yuque.com/xizhuangbao… 《算法与数据结构-图解基础》