1.基本变换
函数内使用任何临时变量,交换两个数的值。
//思路:使用中间变量
public class Exchange {
public int exchangeAB(int A,int B) {
int tmp = 0;
tmp = A;
A = B;
B = tmp;
}
}
2.无缓存交换
牛客网:https://www.nowcoder.com/questionTerminal/845ec89145b04b2b855d020d9c3ea2ef
请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。
给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。
//思路一:通过两个计算两个数的和与差来交换a,b的位置
//(a,b)----(a+b,b)----(a+b,a-b)------(b,a-b)----(b,a)
import java.util.*;
public class Exchange {
public int[] exchangeAB(int[] AB) {
AB[0]=AB[0]+AB[1];
AB[1]=AB[0]-2*AB[1];
AB[0]=(AB[0]-AB[1])/2;
AB[1]=AB[0]+AB[1];
return AB;
}
}
//思路二:使用加法会溢出,可使用异或
//异或运算,按位相同为0,不同为1
//交换律
//结合律(即(a^b)^c == a^(b^c))
//对于任何数x,都有x^x=0,x^0=x
//自反性 A XOR B XOR B = A xor 0 = A
import java.util.*;
public class Exchange {
public int[] exchangeAB(int[] AB) {
/*AB[0] ^= AB[1];
AB[1] ^= AB[0];
AB[0] ^= AB[1];
*/
AB[0] = AB[0]^AB[1];
AB[1] = AB[0]^AB[1];
AB[0] = AB[0]^AB[1];
return AB;
}
}
版权声明:本文为qinghuan1998原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。