leetcode-mid-math-371. Sum of Two Integers-NO-???
2024-09-07 17:08:06
mycode:
没思路啊。。。二级制四则运算不熟悉。。。
参考:
既然不能使用加法和减法,那么就用位操作。下面以计算5+4的例子说明如何用位操作实现加法:
1. 用二进制表示两个加数,a=5=0101,b=4=0100;
2. 用and(&)操作得到所有位上的进位carry=0100;
3. 用xor(^)操作找到a和b不同的位,赋值给a,a=0001;
4. 将进位carry左移一位,赋值给b,b=1000;
5. 循环直到进位carry为0,此时得到a=1001,即最后的sum。
上面思路还算正常,然而对于Python就有点麻烦了。因为Python的整数不是固定的32位,所以需要做一些特殊的处理,具体见代码吧。
代码里的将一个数对0x100000000取模(注意:Python的取模运算结果恒为非负数),是希望该数的二进制表示从第32位开始到更高的位都同是0(最低位是第0位),以在0-31位上模拟一个32位的int。
注意:
对于:该数的二进制表示从第32位开始到更高的位都同是0 ~ 方法一:取余数 方法二:异或
return:不懂。。?????
class Solution(object):
def getSum(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
while b != 0:
carry = a & b
a = (a ^ b) % 0x100000000
b = (carry << 1) % 0x100000000
return a if a <= 0x7FFFFFFF else a | (~0x100000000+1)
class Solution(object):
def getSum(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
MAX = 0x7FFFFFFF
MIN = 0x80000000
mask = 0xFFFFFFFF
while b != 0:
a, b = (a ^ b) & mask, ((a & b) << 1) & mask return a if a <= MAX else ~(a ^ mask)
最新文章
- Git 基本概念及常用命令
- MVC Castle依赖注入实现代码
- Android 6.0 权限管理
- (九)uboot配置编译、源码分析
- 黄聪:《跟黄聪学WordPress主题开发》
- hdu1875
- AJAX里调用AJAX,作定时进度刷新
- 安装MYSQL 出现Error 1045 access denied 的解决方法
- 一看就懂ReactJS
- [AC自动机][HDU3065]
- zoj 1200 Mining
- Velocity入门系列
- JSP的学习(3)——语法知识二之page指令
- 安装pygame
- lua.c:80:31: fatal error: readline/readline.h: No such file or directory
- YII2 用 in查询的时候出现无结果, 删除某些值后查询有结果 提前sort数组即可
- C/C++中如何在main()函数之前执行一条语句?
- dom4j 简单使用
- Python中的lambda的简单介绍
- 洛谷P4344 [SHOI2015]脑洞治疗仪(ODT)