给定一个int数组AB,要求编写一个函数,不使用任何临时变量直接交换第零个元素和第一个元素的值。并返回交换后的数组。
测试样例:
[1,2]
返回:[2,1]
class Exchange {
public:
vector<int> exchangeAB(vector<int> AB) {
// write code here
AB.insert(AB.end(), AB.begin(), AB.end());
AB.erase(AB.begin());
AB.erase(AB.end() - 1);
return AB;
}
};
我的方法还是最low的。。
public int[] exchangeAB(int[] AB) {
// write code here
AB[0] = AB[0] + AB[1];
AB[1] = AB[0] - AB[1];
AB[0] = AB[0] - AB[1];
return AB;
}
class Exchange:
def exchangeAB(self, AB):
AB[0], AB[1] = AB[1], AB[0]
return 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) {
// write code here
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;
}
}
public int[] exchangeAB(int[] AB) {
// write code here
// 利用异或^运算的性质
AB[0] = AB[0] ^ AB[1];
AB[1] = AB[0] ^ AB[1];
AB[0] = AB[0] ^ AB[1];
return AB;
}
// AB[0] = AB[0] ^ AB[1]
// AB[1] = AB[0]^ AB[1] = AB[0] ^ AB[1] ^ AB[1] = AB[0] ^ 0 = AB[0]
// AB[0] =AB[0] ^AB[1] = AB[0] ^ AB[1] ^ AB[0] = AB[1]
import java.util.*;
public class Exchange {
public int[] exchangeAB(int[] AB) {
// write code here
AB[0]=AB[0]^AB[1];
AB[1]=AB[0]^AB[1];
AB[0]=AB[0]^AB[1];
return AB;
}
}