题目
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sum-of-two-integers
给你两个整数 a 和 b ,不使用 运算符+ 和- ???????,计算并返回两整数之和。
示例 1:
输入:a = 1, b = 2 输出:3
示例 2:
输入:a = 2, b = 3 输出:5
提示:
-1000 <= a, b <= 1000
解法
class Solution:
def getSum(self, a: int, b: int) -> int:
return sum([a, b])
- 位运算:
回顾一下二进制相关知识: 二进制就是将数字转换成二进制0,1的形式进行表示:
注意: 二进制中减法是用补码的加法来实现的
在 Python 中,整数不是 32 位的,也就是说你一直循环左移并不会存在溢出的现象,这就需要我们手动对 Python 中的整数进行处理,手动模拟 32 位 INT 整型。
具体做法是将整数对 0x100000000(2^32) 取模,保证该数从 32 位开始到最高位都是 0
class Solution(object):
def getSum(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
MASK = 0x100000000
MAX_INT = 0x7FFFFFFF
MIN_INT = MAX_INT + 1
while b != 0:
carry = (a & b) << 1
a = (a ^ b) % MASK
b = carry % MASK
return a if a <= MAX_INT else ~((a % MIN_INT) ^ MAX_INT)
复杂度分析
最好的情况下
参考
|