面试中被问到的一个非常棘手的问题。
交换两个变量的值,如a=10
和b=15
。
通常,要交换两个变量值,我们需要第三个变量,如下所示:
temp=a;
a=b;
b=temp;
现在的要求是,交换两个变量的值,而不使用第三个变量。
发布于 2009-12-01 21:42:33
一般形式是:
A = A operation B
B = A inverse-operation B
A = A inverse-operation B
但是,您必须潜在地注意溢出,而且并不是所有的操作都有一个为该操作定义的所有值定义良好的逆值。例如*和/直到A或B为0为止
xor特别令人满意,因为它是为所有int定义的,并且是它自己的逆数
发布于 2009-12-01 21:26:12
a = a + b
b = a - b // b = a
a = a - b
发布于 2009-12-01 21:28:05
正如manu已经提到的,XOR算法是一种流行的算法,它适用于所有整数值(包括指针,然后加上一些运气和强制转换)。为了完整起见,我想提到另一个功能较弱的加/减算法:
A = A + B
B = A - B
A = A - B
在这里,你必须小心溢出/下溢,但除此之外,它也能正常工作。您甚至可以在浮点数/双精度数上尝试此操作,因为不允许对这些浮点数/双精度数执行XOR运算。
https://stackoverflow.com/questions/1826159
复制相似问题