本文共 1012 字,大约阅读时间需要 3 分钟。
编写一个函数,不用临时变量,直接交换numbers = [a, b]
中a
与b
的值。(numbers.length = 2)
示例:
输入: numbers = [1,2]
输出: [2,1]
即我们熟悉的题目:
不适用额外的变量交换a、b两数的值。
而解决这个题目,我们只需要三行代码
a=a^b;b=a^b;a=a^b;
然而这三行代码是什么意思呢?让我们慢慢领略。
首先我们要搞清楚什么是异或?
所谓的 " ^ " (异或)是指对应比特位不同为1,不同为0;
可能有的小伙伴有点迷惑,什么呢?
o(* ̄︶ ̄*)o,不要着急,我们来揭秘。
我们重新强调一句话:
既然这样:
0000 0000 0000 0000 0000 0000 0000 0000 0
0000 0000 0000 0000 0000 0000 0000 1001 9 0000 0000 0000 0000 0000 0000 0000 1001 9 0^9= 9 9^9=0
懂了这两个知识后,我们再来看那三行代码到底是怎么实现的?
我们只需要展开一下,就会明白彻彻底底。
a=a^b //a=a^bb=a^b;//b=(a^b)^(b)=a^(b^b)=aa=a^b;//a=(a^b)^(a)=b
好了,本文就此结束了。让我们在看一眼题目的代码:
class Solution {public: vector swapNumbers(vector & numbers) { numbers[0]=numbers[0]^numbers[1];//a=a^b numbers[1]=numbers[0]^numbers[1];//b=(a^b)^b=a numbers[0]=numbers[0]^numbers[1];//a=(b^a)^a=(a^b)^a return numbers; }};
转载地址:http://ndhkk.baihongyu.com/