用户登录
用户注册

分享至

【面试题 16.01】交换数字 (异或)

  • 作者: 抹不掉的回忆5811339
  • 来源: 51数据库
  • 2021-07-05

题目

题目链接
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:

输入: numbers = [1,2]
输出: [2,1]

提示:

numbers.length == 2

解题思路 1

创建数组开辟了一点点点的内存难道不可以忽略不计吗

代码

class Solution {
    public int[] swapNumbers(int[] numbers) {
        return new int[]{numbers[1],numbers[0]};
    }
}

解题思路 2

利用异或操作

  • a ^ b ^ b = a
  • a ^ b ^ a = b
  • a ^ a = 0
  • 0 ^ a = a
  • 异或满足交换律 结合律

代码

class Solution {
    public int[] swapNumbers(int[] numbers) {
        numbers[0] = numbers[0] ^ numbers[1];
        numbers[1] ^= numbers[0];
        numbers[0] ^= numbers[1];
        return numbers;
    }
}
软件
前端设计
程序设计
Java相关