今天刷算法题:一个简单的问题如下:
请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。
给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。
测试样例:
[1,2]
返回:[2,1]
是不是很简单。。。。。。。。
我首先 脑海里想到的解决办法是:
import java.util.*;
public class Exchange {
public int[] exchangeAB(int[] AB) {
// write code here
int temp=AB[0];
AB[0]=AB[1];
AB[1]=temp;
return AB;
}
}
完美解决问题,但是我们题目要求的是不能额外定义变量哦。。。。虽然实现了功能,但是并不是它的要
于是我又继续想了一下,如下:
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;
}
}
既然加减可以,那么乘除应该也是可以的,代码如下:
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;
}
}
咦,这次好像满足了题目的要求。。。。想一想还有没有其他的解决办法呢?
还真有:如下:
采用的是异或的思想,java中我们一个数如果异或同一个数两次,那么得到的还是原来的数。
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;
}
}
暂且想到这四种方法,在此留个影,希望帮助自己和有需要的人。