leetocode371 Sum of Two Integers
2016-07-01 12:26
441 查看
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
Example:
Given a = 1 and b = 2, return 3.
写一个渣版本
首先判断结果的符号(+,-)
分别有以下几种:
-9,7 结果<0
-9,-9 结果<0
7,9 结果>0
9,-7 结果>0
这里的符号判断用signfunc() and calsign()来实现,返回结果符号和取绝对值的a,b
同号相加的方式(9+7)
这里用到了一个半加法的思想, 即两位单独的位相加其结果可以用异或(^)得到, 进位可以用与(&)得到. 然后对于两个数字来说同样可以延伸这个思想.
异号相加的方式(-9+7)
异号相加实际上是两数相减,研究发现(9^7)=14
1001
0111
——
1110
(-14)取反是13
1…1110
————
0…1101
对有意义的位再取反即得到结果
0…1101
————
0….0010
Example:
Given a = 1 and b = 2, return 3.
写一个渣版本
首先判断结果的符号(+,-)
分别有以下几种:
-9,7 结果<0
-9,-9 结果<0
7,9 结果>0
9,-7 结果>0
这里的符号判断用signfunc() and calsign()来实现,返回结果符号和取绝对值的a,b
同号相加的方式(9+7)
这里用到了一个半加法的思想, 即两位单独的位相加其结果可以用异或(^)得到, 进位可以用与(&)得到. 然后对于两个数字来说同样可以延伸这个思想.
异号相加的方式(-9+7)
异号相加实际上是两数相减,研究发现(9^7)=14
1001
0111
——
1110
(-14)取反是13
1…1110
————
0…1101
对有意义的位再取反即得到结果
0…1101
————
0….0010
class Solution(object): def signfunc(self,a): if a>0: return 1,a elif a<0: return 2,-a else: return 0,0 def calsign(self, a, b): flagmatrix=[[0,1,-1],[1,1,0],[-1,0,-1]] flaga,a1=self.signfunc(a) flagb,b1=self.signfunc(b) if a1>b1: flagmatrix[2][1]=-1 flagmatrix[1][2]=1 else: flagmatrix[2][1]=1 flagmatrix[1][2]=-1 return flagmatrix[flaga][flagb],a1,b1 def getSum(self, a, b): """ :type a: int :type b: int :rtype: int """ if a*b>=0: flag,a,b=self.calsign(a,b) while(b): carry=a&b a=a^b b=carry<<1 return flag*a else: tmp=~(-(abs(a)^abs(b))) flag,a,b=self.calsign(a,b) if a==b: return 0 ans=[] while(tmp): ans.append('%s'%((tmp%2)^1)) tmp=tmp/2 ans.reverse() return flag*int(''.join(ans),2)
相关文章推荐
- Android Service组件开发用到的几个知识点
- SQL Server 命名实例更改端口进行发布订阅
- Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
- 天虎科技:全国智能硬件投融资情况大盘点
- 天虎科技:全国智能硬件投融资情况大盘点
- sublime开发php必备工具集合(mac)
- 10005---刘润:你希望员工深情凝视你,还是你们共同的远方?
- Codeforces-688A Opponents
- 利用for循环来判断点击或加载的页面元素是否有效
- iOS开发——使用NSInputStream逐行读入大文件(2)
- 虚拟化基础架构Windows 2008篇之11-WSUS服务器的安装与配置
- zookeeper启动为什么占用8080端口,修改哪个配置文件可以改变端口?
- python面相对象进阶
- 教你一招:使用最快速的方式激活windows10专业版
- 数组的输出
- Android WebView设置微技巧
- IOS UIView--动画、圆角的拓展
- MySQL 5.7 学习:安全相关特性
- python异常处理
- linux 的useradd 命令的p选项