leetcode奇技淫巧-两数交换的几种方式

文章目录

  • 方式一:tmp临时变量
  • 方式二:求和
  • 方式三:异或运算

方式一:tmp临时变量

优点思路清晰,缺点开辟一个额外空间

int a = 1, b = 2, tmp;
tmp = a;
a = b;
b = tmp;

方式二:求和

先求 a 与 b 的和给 a,然后拿这个和去减 b 的值就是 a 的值再给 b,这时候我们再把和减去新的 b 的值就是 a 的值了,思路繁琐一些,但是不需要开辟额外空间,但是在a + b时有可能导致 int 溢出,这个需要注意

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

求和可以,求积其实也可以的,逻辑是一样的。其实异或运算也是可以的,但是异或平时用的少,我这把它放在第三种方式里头了

方式三:异或运算

异或运算满足两数相同,异或为 0,不同的话异或不为 0,任何一个数和 0 异或都等于那个数本身

int a = 1, b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;

或者直接写成如下形式,是不是很有美感呢?

int a = 1, b = 2;
a ^= b;
b ^= a;
a ^= b;

你可能感兴趣的:(#,LeetCode,奇技淫巧)