交换两个变量的值,我们常规做法是申请一个第三方变量,如果要求不能使用第三方变量,该怎么交换两变量呢?
今天介绍两种不依赖第三方变量的交换方法。
1、算术运算法
就是最基本的加减法,这里主要是利用了坐标思想。坐标轴上两个点,通过计算两点之间的距离来完成交换操作。大家可以参考下面这张坐标图来理解。
a = 5b = 8#计算a和b两个点到原点的距离之和#并且赋值给a,这一步a的值已经发生变化a = a+b#使用距离之和减去b到原点的距离#a-b 其实就是a的原值(a到原点的距离),现在赋值给了bb = a-b#再使用距离之和减去b (a到原点的距离)#得到的是b的原值(b到原点的距离),现在赋值给了aa = a-b复制代码
或者
a = 5b = 8#计算ab两点间的距离差,并赋值给aa = b-a#用b到原点的距离减去上一步得到的距离差#即得出a到原点的距离,把a赋值给bb = b-a#再使用a到原点的距离(即现在b的值)加上第一步中的距离差#得到b到原点的距离,把这个距离赋值给aa = b+a复制代码
可能会有同学会问如果 a 或 b 有负数会不会影响结果,其实无论正负数都可以正确完成交换,因为在坐标上,我们计算的是距离,大家可以尝试把变量改成负数试试。
2、异或运算
在上一篇文章中,我们也有讲到使用异或运算找出数组中只出现一次的元素,在这里不再详细解释异或运算的具体操作了,下面直接给出具体实现过程。
a = 5b = 8#a 和 b 异或运算得到一个新值并赋值给 aa = a^b#再把这个新值和b做异或可以得出a的值,并赋值给bb = a^b#上一步中得到的其实是a的原值,再次把第一步中的新值和b做异或#得到b的原值,赋值给aa = a^b复制代码
a 和 b 异或运算得到另一个数 c,当 c 和其中一个值再做异或运算时,能得到另外一个的原值。比如当 c 再和 b 异或运算就能重新得到 a 的值。