携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 29 天,点击查看活动详情
交换数字
原题地址
编写一个函数,不用临时变量,直接交换 numbers = [a, b] 中 a 与 b 的值。
示例1:
输入: numbers = [1,2]
输出: [2,1]
示例2:
输入: numbers = [0,2147483647]
输出: [2147483647, 0]
提示:
numbers.length == 2-2147483647 <= numbers[i] <= 2147483647
思路分析
方法一
使用 ES6 的语法可以很快速的将数组中的两个元素进行交换位置,具体使用方法为 [a, b] = [b, a]
方法二
- 使用两个数字之间的加减法可以得到想要的结果;
a = b - a→b = b - a→a = b + a。
方法三
- 使用异或运算符来解决;
a ^ b ^ b = a且a ^ b ^ a = b,因此可以a = a ^ b→b = a ^ b→a = a ^ b。
方法四
- 使用数组的性质,将
numbers[0]构造成一个二维数组,然后分别取值即可交换; - 也可使用数组的
reverse方法直接将数组翻转。
AC 代码
方法一
/**
* @param {number[]} numbers
* @return {number[]}
*/
var swapNumbers = function(numbers) {
[numbers[0], numbers[1]] = [numbers[1], numbers[0]]
return numbers
};
结果:
- 执行结果: 通过
- 执行用时:64 ms, 在所有 JavaScript 提交中击败了30.00%的用户
- 内存消耗:41 MB, 在所有 JavaScript 提交中击败了34.00%的用户
- 通过测试用例:52 / 52
方法二
/**
* @param {number[]} numbers
* @return {number[]}
*/
var swapNumbers = function(numbers) {
numbers[0] = numbers[0] - numbers[1]
numbers[1] += numbers[0]
numbers[0] = numbers[1] - numbers[0]
return numbers
};
结果:
- 执行结果: 通过
- 执行用时:64 ms, 在所有 JavaScript 提交中击败了30.00%的用户
- 内存消耗:40.8 MB, 在所有 JavaScript 提交中击败了66.00%的用户
- 通过测试用例:52 / 52
方法三
/**
* @param {number[]} numbers
* @return {number[]}
*/
var swapNumbers = function(numbers) {
numbers[0] = numbers[0] ^ numbers[1]
numbers[1] = numbers[0] ^ numbers[1]
numbers[0] = numbers[0] ^ numbers[1]
return numbers
};
结果:
- 执行结果: 通过
- 执行用时:60 ms, 在所有 JavaScript 提交中击败了54.00%的用户
- 内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了45.33%的用户
- 通过测试用例:52 / 52
方法四
/**
* @param {number[]} numbers
* @return {number[]}
*/
var swapNumbers = function(numbers) {
numbers[0] = [numbers[0] , numbers[1]]
numbers[1] = numbers[0][0]
numbers[0] = numbers[0][1]
return numbers
};
结果:
- 执行结果: 通过
- 执行用时:56 ms, 在所有 JavaScript 提交中击败了80.67%的用户
- 内存消耗:40.9 MB, 在所有 JavaScript 提交中击败了40.67%的用户
- 通过测试用例:52 / 52