- 掘金团队号上线,助你 Offer 临门! 点击 查看活动详情
本题核心
每天一道简单算法,防止老年痴呆~
题目描述
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。
示例:
输入: numbers = [1,2]
输出: [2,1]
提示:numbers.length == 2
解题思路
题目规定不能用临时函数,也就是传进来的是numbers,传出去的还得是numbers,我看leetcode上有些同学最后new了个int数组返回,虽然通过了测试,但是违背了临时变量的意思。
我开始做时一眼就相当和数学中的和,只要有和和参数在,就能算出另一个参数,那同理减法也可以,还有异或也是可以的。这里列出减法和异或。
解题代码
姐法1 差
public int[] swapNumbers(int[] numbers) {
numbers[0]=numbers[0]-numbers[1];
numbers[1]=numbers[0]+numbers[1];
numbers[0]=numbers[1]-numbers[0];
return numbers;
}
姐法2 异或
public int[] swapNumbers(int[] numbers) {
numbers[0]=numbers[0]^numbers[1];
numbers[1]=numbers[0]^numbers[1];
numbers[0]=numbers[1]^numbers[0];
return numbers;
}
##总结
本题最好还是用异或,加法和减法都可能溢出。
每多思考一种姐法,你就多一种姐法的快乐。~骑士君,ヾ(◍°∇°◍)ノ゙加油啊