目录
一、题目内容
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
二、解题思路
1.按位异或代表相加,但是对于1+1=10的情况并不能显示进位,因此需要按位与来得到进位值,但是1&1=1在低位,因此需要左移一位变为10,再将这个左移一位后的进位数与按位异或得到数再进行按位异或,得到新的相加值,同样的这个值没有进位,因此还需要将左移进位的进位数和按位异或的数同样进行按位与得到新的进位,并同样需要左移一位得到新的进位,如此反复;
2.注意显示范围
三、代码
class Solution:
def getSum(self, a: int, b: int) -> int:
t = (a ^ b) & 0xFFFFFFFF
f = (a & b) << 1
if f != 0:
return self.getSum(t, f)
return t if t >> 31 == 0 else t - 0x100000000
if __name__ == '__main__':
a = 3
b = 5
s = Solution()
ans = s.getSum(a, b)
print(ans)
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。个人GitHub网址为:https://github.com/nickhuang1996