java中两个变量之间交换方法总结

来源:互联网 发布:制作歌曲伴奏软件 编辑:程序博客网 时间:2024/06/05 20:24


今天刷算法题:一个简单的问题如下:

请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。

给定一个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;    }}

暂且想到这四种方法,在此留个影,希望帮助自己和有需要的人。