假设需要交换的两个数为 a, b
使用中间变量
-------------| a | b | t |-------------
使用一个中间变量来做媒介来交换,设中间变量为t;则通过 a -> t; b -> a; t -> b
完成了交换,代码如下
var t = a;a = b;b = t;
不使用中间变量
a = a + b;b = a - b;a = a - b;
初看起来可能比较迷糊,下面分析一下,假设内存结构如下
a1 a2---------| a | b |---------
-
先把两个的和保存进a所在的位置
a + b -> a1
,状态改变如下a1 a2-------------| a + b | b |-------------
-
现在a1位置已经为
a+b
了,减去一个b
便变成了a
,然后放在a2位置,现在状态如下a1 a2-------------| a + b | a |-------------
-
最后用a1所在位置的数减去a2所在位置的数也即
a + b - a = b
,放进a1,完成交换a1 a2---------| b | a |---------
其实就是把两数先累加放在其中一个位置,再用这个位置的数减去两次另一个位置的数