1.请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。
给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。
测试样例:
[1,2]
返回:[2,1]
方法一:大数情况下可能溢出
public class One {
public int[] exchangeAB(int[] AB) {
// write code here
//思路一:a=a+b;b=a-b;a=a
AB[0]=AB[0]+AB[1];
AB[1]=AB[0]-AB[1];
AB[0]=AB[0]-AB[1];
return AB;
}
}
方法二:异或
public class One {
public int[] exchangeAB(int[] AB) {
// write code here
//思路二:通过异或方式
AB[0]=AB[0]^AB[1];
AB[1]=AB[1]^AB[0];
AB[0]=AB[0]^AB[1];
return AB;
}
}
测试类:
import java.util.*;
public class Main {
public static void main(String[] args){
int[] AB={1,2};
One one=new One();
AB=one.exchangeAB(AB);
System.out.println(Arrays.toString(AB));
}
}
收获:
1.Arrays.toString(AB)//输出数组、
刚开始用傻不隆冬不会输出数组啊、以为跟C++一样把数组名(首地址)给他就行、、结果IDE出来的都是地址码
2.异或的用处:当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1
(1)跟1异或取反
(2)跟自己异或置0
特定位取反、无缓存交换、两值相等、