We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 17ded3d commit 82f5116Copy full SHA for 82f5116
371.sum-of-two-integers.py
@@ -0,0 +1,25 @@
1
+class Solution:
2
+ def getSum(self, a, b):
3
+ """
4
+ :type a: int
5
+ :type b: int
6
+ :rtype: int
7
8
+ # python中一直左移是不会溢出的,所以要手动模拟32位int型
9
+ MAX_INT = 0x7FFFFFFF
10
+ MIN_INT = MAX_INT + 1
11
+ MASK = 0x100000000
12
+ while b != 0:
13
+ carry = (a & b) << 1 # 表示进位
14
+ a = (a ^ b) % MASK # 对其取余则将范围限制在[0,2^32-1]内,也就是int的范围
15
+ b = carry % MASK # 同理
16
+ # 如果小于MAX_INT就不用处理了,如果溢出就要:
17
+ # 以4位bit为例,从0000-1111,可以表示的范围为[0,15],如果计算出16那就是溢出了,
18
+ # 16是10000,此时的MIN_4BIT为16,取余为0,0000异或1111为1111再取反就是0了,
19
+ # 将范围限制在了4位bit的范围内
20
+ return a if a <= MAX_INT else ~((a % MIN_INT) ^ MAX_INT)
21
+
22
+if __name__ == '__main__':
23
+ a = -1
24
+ b = 1
25
+ print(Solution().getSum(a, b))
0 commit comments