交换两个变量的骚操作


交换两个变量的值,我们常规做法是申请一个第三方变量,如果要求不能使用第三方变量,该怎么交换两变量呢?


今天介绍两种不依赖第三方变量的交换方法。


1、算术运算法


就是最基本的加减法,这里主要是利用了坐标思想。坐标轴上两个点,通过计算两点之间的距离来完成交换操作。大家可以参考下面这张坐标图来理解。



a = 5 b = 8 #计算a和b两个点到原点的距离之和 #并且赋值给a,这一步a的值已经发生变化 a = a+b #使用距离之和减去b到原点的距离 #a-b 其实就是a的原值(a到原点的距离),现在赋值给了b b = a-b #再使用距离之和减去b (a到原点的距离) #得到的是b的原值(b到原点的距离),现在赋值给了a a = a-b 


或者


a = 5 b = 8 #计算ab两点间的距离差,并赋值给a a = b-a #用b到原点的距离减去上一步得到的距离差 #即得出a到原点的距离,把a赋值给b b = b-a #再使用a到原点的距离(即现在b的值)加上第一步中的距离差 #得到b到原点的距离,把这个距离赋值给a a = b+a 


可能会有同学会问如果 a 或 b 有负数会不会影响结果,其实无论正负数都可以正确完成交换,因为在坐标上,我们计算的是距离,大家可以尝试把变量改成负数试试。


2、异或运算


在上一篇文章中,我们也有讲到使用异或运算找出数组中只出现一次的元素,在这里不再详细解释异或运算的具体操作了,下面直接给出具体实现过程。


a = 5 b = 8 #a 和 b 异或运算得到一个新值并赋值给 a a = a^b #再把这个新值和b做异或可以得出a的值,并赋值给b b = a^b #上一步中得到的其实是a的原值,再次把第一步中的新值和b做异或 #得到b的原值,赋值给a a = a^b 


a 和 b 异或运算得到另一个数 c,当 c 和其中一个值再做异或运算时,能得到另外一个的原值。比如当 c 再和 b 异或运算就能重新得到 a 的值。


关键词: 算法

网友留言(0条)

发表评论