1

假设需要交换的两个数为 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 |
---------
  1. 先把两个的和保存进a所在的位置 a + b -> a1,状态改变如下

    a1        a2
    -------------
    | a + b | b |
    -------------
  2. 现在a1位置已经为a+b了,减去一个b便变成了a,然后放在a2位置,现在状态如下

    a1        a2
    -------------
    | a + b | a |
    -------------
  3. 最后用a1所在位置的数减去a2所在位置的数也即 a + b - a = b,放进a1,完成交换

    a1    a2
    ---------
    | b | a |
    ---------

其实就是把两数先累加放在其中一个位置,再用这个位置的数减去两次另一个位置的数


yuanxiaowa
10.1k 声望23.7k 粉丝

循规蹈矩太无聊了,要的就是颠覆