HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
随笔
关于作者
  • 《LearnJavaToFindAJob》

    • 导读

    • 【初级】6~12k档

    • 【中级】12k-26k档

    • 【高级】26k+档

    • 大厂面试题

      • IBM面试题-不借助变量交换两个数
      • 奇怪的面试题
      • 快手

      • 美团

      • 腾讯

      • 阿里

    • 求职建议

    • 面经

  • LearnJavaToFindAJob
  • 大厂面试题
#IBM #面试题
码农阿雨
2022-06-02

IBM面试题-不借助变量交换两个数

一群里的小伙伴去IBM面试,面试官上来就问了一道开胃菜题目:不借助变量如何交换两个数?

这是一道比较简单的题目,但是也颇有意思,如果大家平时有刷LeetCode的习惯,第一次做这个题目应该也能做出来。

平时我们要交换一个数的时候,都是引入一个第三方变量,这样看起来也比较通俗易懂。

但既然强制不能引入新的变量,那应该怎么做呢?

  • 方法一,通过和去 相减,交换数的和是不会变的
  • 方法二,异或,一个数异或两次一个相同的数,等于本身 比如说 5^13^13 = 5
public class 交换两个数 {

    public static void main(String[] args) {
        exchangeNum1(5, 8);
        System.out.println("-----------");
        exchangeNum2(5, 8);
    }

    static void exchangeNum1(int x, int y) {
        System.out.println("x的值为:" + x);
        System.out.println("y的值为:" + y);
        x = x + y;
        y = x - y;
        x = x - y;
        System.out.println("------交换后------");
        System.out.println("x的值为:" + x);
        System.out.println("y的值为:" + y);

    }

    static void exchangeNum2(int x, int y) {
//        ^ 异或,位相同为0,不同为1 , 可以理解为相加,但是不进位,结果要么是和,要么是差
        //
        System.out.println("x的值为:" + x);
        System.out.println("y的值为:" + y);
        x = x ^ y; // 5 ^ 8 = 0101 ^ 1000 = 1101 = 13
        y = x ^ y; //13 ^ 8 = 1101 ^ 1000 = 1000 = 5
        x = x ^ y; //13 ^ 8 = 1101 ^ 0101 = 1000 = 8
        System.out.println("------交换后------");
        System.out.println("x的值为:" + x);
        System.out.println("y的值为:" + y);
    }
}

这两种方法,更好的是第二种——异或,因为加减有溢出的可能性,(同样还可以使用乘除),也是面试的时候需要指出的隐患。

阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#IBM#面试题
上次更新: 2025-02-21 06:04:57
最近更新
01
《LeetCode 101》
02-21
02
IDEA、Golang、Pycharm破解安装
02-21
03
《LeetCode CookBook》
02-21
更多文章>
Theme by Vdoing | Copyright © 2020-2025 码农阿雨
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式