美文网首页经典面试题技术文
经典面试题12 - 交换两个变量

经典面试题12 - 交换两个变量

作者: 豆志昂扬 | 来源:发表于2016-07-18 08:07 被阅读210次
交换

问题:
在不使用中间变量的前提下,请问如何交换两个变量的值?

解答:
这属于经典的入门级面试题,其实答案有多种。

  • 第一类方法也是常用的方法,使用最简单的加减法。
    <blockquote>
    public void swap(int a,int b){
    a=a+b;
    b=a-b;
    a=a-b;
    }
    </blockquote>

  • 第二类方法和第一种类似,但使用的是乘除法,其实乘除法只是加减法的变种。
    <blockquote>
    public void swap(int a,int b){
    a = a * b;
    b = a / b;
    a = a / b;
    }
    </blockquote>

  • 第三类方法使用异或实现交换,异或的原理就是如果2个数中对应的位上相同为0,相异为1,即任何数异或上其本身为0, 而任何数和 0 异或还是任何数。
    <blockquote>
    public void swap(int a,int b){
    a ^= b; //a=a^b
    b ^= a; //b=b(ab)=bab=bba=0^a=a
    a ^= b; //a=(ab)a=aba=aab=0^b=b
    }
    </blockquote>

推荐阅读

经典面试100题 - 持续更新中

相关文章

网友评论

  • 4f83dbb41fc9:异或那个有问题,当a = b就会出现错误,而且这样效率太低。。具体可以Google一下陈硕写过的一篇文章分析。

本文标题:经典面试题12 - 交换两个变量

本文链接:https://www.haomeiwen.com/subject/syssjttx.html