「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
哈喽,大家好,我是阿Q。前几天有个小伙伴去面试,被面试官的一个问题劝退了:请说出几种不使用第三方变量交换两个变量值的方法。
问题有点绕,好不容易缕清了面试官的问题,却发现答不上来。一时间尴尬无比,只能硬着头皮说不会。
遇到交换变量值的问题,通常我们的做法是:定义一个新的变量,借助它完成交换。
代码如下:
t = a;
a = b;
b = t;
但问题的重点是“不使用第三方变量”,那就变得“可爱”起来了。思考过后,抛出以下四种方法来解决该问题:
- 变量本身交换数值;
- 算术运算;
- 指针地址操作;
- 位运算;
变量本身交换数值
b = (a + b) - (a = b);
首先执行 a + b 操作,然后将 b 赋值给 a,则 b = a + b - b = a
,这就完成了 ab 的互换操作。
算术运算
如图所示: OA = a; OB = b; AB = b - a;
首先我们把 AB 之间的距离 b - a 赋值给 a,此时 AB = a, OB = b 。
由于要达到 ab 交换的目的,所以 OA 要等于 b,而此时 OA 的距离为 b - a ,所以得将 b - a 赋值给 b ,此时 OA = b, AB = a 。
很容易从图中看出,OB 的距离为 b + a,所以我们只需要将 b + a 赋值给 a 就可以完成两者的交换了。
综上所述,我们的步骤为
int a = 10;
int b = 15;
a = b - a; //b=15;a=5;
b = b - a; //b=10;a=5;
a = b + a; //b=10;a=15;
该算法只能用于整型类型。
以上就是今天的全部内容了,剩下的两种方法我们明天继续总结。如果你有不同的意见或者更好的idea
,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!