9

我想分享一个在面试中大部分时间被问到的问题,我无法回答这个问题,但最终我找到了答案:

如何在不使用第三个变量的情况下交换 2 个变量值?

4

2 回答 2

51

此方法适用于任何变量类型:

$a = 5;
$b = 6;
list($a, $b) = array($b, $a);
print $a . ',' . $b;

输出:

6,5

另一种简单的方法(仅适用于数字,不适用于字符串/数组/等)是

$a =  $a + $b;  // 5 + 6 = 11
$b = $a - $b;   // 11 - 6 = 5
$a = $a - $b;  // 11 - 5 = 6
print $a . ',' . $b;

输出:

6,5
于 2013-08-21T11:40:16.177 回答
9

你肯定想要XOR 交换算法吗?至少对于数值变量。

常规交换需要使用临时存储变量。然而,使用 XOR 交换算法,不需要临时存储。算法如下:

X := X XOR Y

Y := X XOR Y

X := X XOR Y

虽然我从未见过它在实际场景中使用过(除了汇编工作之外)

于 2013-08-21T11:41:59.540 回答