题目描述
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:
输入: numbers = [1,2]
输出: [2,1]
提示:numbers.length == 2
题目链接:https://leetcode-cn.com/problems/swap-numbers-lcci
题解
数学方法
第一秒想到的就是数学方法,如下:
class Solution {
public int[] swapNumbers(int[] numbers) {
numbers[0] = numbers[0] + numbers[1];
numbers[1] = numbers[0] - numbers[1];
numbers[0] = numbers[0] - numbers[1];
return numbers;
}
}
存在问题:第一步加法的时候可能会溢出(这道题并没有,可以通过)
异或运算
class Solution {
public int[] swapNumbers(int[] numbers) {
numbers[0] = numbers[0] ^ numbers[1];
numbers[1] = numbers[0] ^ numbers[1];
numbers[0] = numbers[0] ^ numbers[1];
return numbers;
}
}
这个应该算是我能想到的最好的方法了吧