[LeetCode 16.01. 交换数字] | 刷题打卡

400 阅读1分钟
  • 掘金团队号上线,助你 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;
    }

##总结

本题最好还是用异或,加法和减法都可能溢出。

每多思考一种姐法,你就多一种姐法的快乐。~骑士君,ヾ(◍°∇°◍)ノ゙加油啊