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

交换

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

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

  • 第一类方法也是常用的方法,使用最简单的加减法。
    <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题 - 持续更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容