Leetcode刷题66-371(升级版).不用任何额外变量交换两个整数的值

题目来源:补昨天欠的题目,悄悄的说(昨天我去干大事儿去了,哈哈哈)

371(升级版).不用任何额外变量交换两个整数的值

1.问题描述

不用任何额外变量交换两个整数的值
示例:

输入: a = 1, b = 2
输出: a = 2, b = 1
在不借助任何额外变量的情况下完成交换
提示:用位运算

2.大神们的解决方案

方法(位运算):

int swap(int a, int b)
{
	a = a^b;  // 步骤1
	b = a^b;  // 步骤2
	a = a^b;  // 步骤3
	// 设 a = a0 , b = b0
	// 则 步骤1 a = a ^ b = a0 ^ b0, 而b没变 b = b0
	//    步骤2 b = a ^ b = a0 ^ b0 ^ b0 (即将a=a0^b0带入)
	              //      = a0 = a, 
	             //此时 a = a0 ^ b0
	//    步骤3 a = a0 ^ b0 
	 //          = a0 ^ a 
	 //          = a0 ^ a0 ^ b0 
	 //          = b0 = b ,
	 //          而 b = a 所有完成交换
	 //注:b0 ^ b0 = 0;   
}

3.我的收获

又是栽在了 位运算里了。。。
突然感觉自己好菜。。。

2019/4/26 胡云层 于南京 65

猜你喜欢

转载自blog.csdn.net/qq_40858438/article/details/89602466