要求:不能创造临时变量(第三个变量),实现两个数字的交换
思路分析:
这是创造第三个变量的方法,很简单。
一般来说,我们将两个数进行交换,创造出第三个变量是常用的方法,可就是有这样的变态面试官,不让你创造出第三个变量。接下来我们从数字在内存中的存储方式下手。
解决方法:
举个例子
a = 10 --- 00001010
b = 20 --- 00010100
我们将a ^ a 进行按位异或运算(相同为0,相异为1) 可以得到结果为0
可知 相同的数字按位异或运算的结果都为0,
我们再将a ^ 0 进行按位异或运算 (相同为0,相异为1)可以得到a
可知 与0进行按位异或运算的结果等于那个数本身。
我们进行算法实现。
a = a ^ b,
b = a ^ b,上面的算式带入下来得到b = a ^ b ^ b, 这样就实现b = a 了。
a = a ^ b,我们把算式带入得到 a = a ^ b ^ a, 这样就实现a = b 了。
代码实现:
在现实中,往往是创造出第三个变量进行数字交换,高效,简单。在这一道面试题中,这种方法很难想到,所以大家在平时学习中一定要打好基础,避免以后在面试过程中遇到这样的题的时候没有思路。