题目链接:https://leetcode.cn/problems/sum-of-two-integers/description/
题目描述
给你两个整数 a
和 b
,不使用 运算符 +
和 -
,计算并返回两整数之和。
示例 1
输入:a = 1, b = 2
输出:3
示例 2
输入:a = 2, b = 3
输出:5
提示
- -1000 <= a, b <= 1000
Code
解法一:位运算
昨天的每日一题用异或运算找唯一数,今天看到这题目我的第一感觉就是用位运算,加上最近数电学了全加器,加法的原理本质上是二进制数的本位和 + 低位的进位
。我们看一个例子:2 + 5 = 7
2 = 0 1 0 7 = 1 1 1
0 1 0
+ 1 1 1
————
1 0 0 1(正常相加)
1 0 1(异或)
0 1 0(且)
我们通过这个例子可以发现:
1.异或操作可以实现记录本位和
2.且操作可以记录低位的进位
我们只需要将低位的进位加到本位和上就可以得出这次加法的结果
,低位的进位只需要左移一位就可以到本位和同一位,本位和 + 低位的进位
我们可以再次使用这个思路,直到低位的进位为0
的时候返回本位和即可
class Solution {
public int getSum(int a, int b) {
int xorRes = a ^ b;//本位结果
int andRes = (a & b) << 1;//低位的进位
if (b == 0) {//低位不存在进位了,本位和就是最终结果
return a;
}
return getSum(xorRes, andRes);
}
}