【面试题 16.01】交换数字 (异或)
程序员文章站
2022-03-02 13:26:30
题目题目链接编写一个函数,不用临时变量,直接交换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]};...
题目
题目链接
编写一个函数,不用临时变量,直接交换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;
}
}
本文地址:https://blog.csdn.net/qq_35416214/article/details/107285193