1. A + B 问题
描述:给出两个整数 a 和 b , 求他们的和。
解法一:直接return a+b
class Solution:
def aplusb(self, a, b):
return a + b
解法二: 位运算
class Solution:
def aplusb(self, a, b):
if a == 0: #不再进位
return b
if b == 0: #直到没有需要进位的时候返回
return a
if a == -b:
return 0
m = a^b #异或运算得到不需进位的数
n = (a&b) << 1 #先与运算,再左移一位得到需要进位的数
return self.aplusb(m,n)
#递归方法,将需要进位的数与不需进位的数相加,不断重复上述步骤,直至不再产生进位
先介绍一下位运算运算符:与(&):0&0=0,0&1=0,1&0=0,1&1=1;
或(|) :0&0=0,0&1=1,1&0=1,1&1=1;
非(~):~0=1,~1=0;
异或(^):0&0=0,0&1=1,1&0=1,1&1=0;
左位移:左位移一位(a<<1)若a = 2,0010 左移一位得0100, 即a<<1为4
左位移一位相当于乘以2的一次方,左移n位,相当于乘以2的n次方
同理:右位移n(a>>n)位相当于除以2的n次方,这里取商
2+3 = 5 相当于二进制010(2) + 011(3) 应得 101(5)
计算步骤:
010+011:010 ^ 011 = 001 ;010 & 011 = 010 ;001<<1=100;
001+100:001 ^ 100 = 101 ;001 & 100 = 000;000<<1=000;
101+000:b=0,return a 101即结果5