fe-weekly-questions icon indicating copy to clipboard operation
fe-weekly-questions copied to clipboard

不借助变量,交换两个数。

Open LuckyWinty opened this issue 4 years ago • 4 comments

function swap(a, b) { //TODO }

LuckyWinty avatar Mar 30 '20 03:03 LuckyWinty

1. 算术交换

针对的是Number,或者类型可以转换成数字的变量类型

function swap(a, b) {
   a = a + b;
   b = a - b;
   a = a - b;
}

通过算术运算过程中的技巧,可以巧妙地将两个值进行互换。但是,有个缺点就是变量数据溢出。因为JavaScript能存储数字的精度范围是 -2^53 到 2^53。所以,加法运算,会存在溢出的问题。

2. 异或运算

^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变.

a = a ^ b;
b = a ^ b; 
a = a ^ b;

3. ES6的解构

[a, b] = [b, a];

更多参考:

  • https://juejin.im/post/58b42fcc5c497d006793cd04
  • https://www.jianshu.com/p/61370227d096

LuckyWinty avatar Mar 30 '20 03:03 LuckyWinty

ES6结构,应该是最好的吧

maqinghao avatar Apr 13 '20 08:04 maqinghao

你借助了变量a和b

55cc avatar Jul 16 '20 08:07 55cc

你借助了变量a和b

我竟无言以对

chenLe1232 avatar Jun 10 '21 03:06 chenLe1232