每日一题(四九)不借助中间变量交换两个变量的值 比如 let a = 1, b = 2 交换 a,b 的值

不借助中间变量交换两个变量的值

比如 let a = 1, b = 2; 交换 a,b 的值

扫描二维码关注公众号,回复: 11620332 查看本文章

答案:

1.利用加法

let a = 1,b = 2;
b = a + b;
a = b - a;
b = b - a;

2.利用减法,可以解决加法溢出的风险

let a = 1;
let b = 2;

b = a - b;
a = a - b;
b = b + a;

3.利用es6 的解构赋值

let a = 1;
let b = 2;
[a,b] = [b,a];

4.按位异或 ^,用到按位异或这个位运算的性质,即相同则为 0 ,不同则为 1

对于两个数字,a 和 b,则有 a^a^b 就等于 b。我们利用这个性质来进行转换

let a = 1,b = 2;
b = a ^ b;
a = a ^ b;//a = a ^ a ^ b;
b = a ^ b;//b = a ^ b ^ b;

过程解释:

a = > 01

b => 10

a ^ a - > 01 ^ 01 肯定是 00  ,因为相同为 0

a ^ a ^ b -> 00 ^ 10 还是 10 ->b

a ^ a ^ b ->

(1)过程: 01 ^ 10 ^ 10 -> 11 ^ 10 -> 01 ->a

(2)其实这里涉及到数学的异或运算符性质:交换律:a ^ b ^ c <=> a ^ c ^ b

还有其他性质:任何数于 0  异或为任何数, 0 ^ n => n,相同的数异或为 0: n^n - >0

5.逗号表达式

逗号表达式是将两个及以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。利用这个性质,先完成一次赋值操作,然后将赋值操作的返回值变为 0  ,就可以了

let a = 1, b = 2;
a = b + ((b=a),0);

猜你喜欢

转载自blog.csdn.net/MFWSCQ/article/details/106420445
今日推荐