文巾解题 67. 二进制求和
生活随笔
收集整理的這篇文章主要介紹了
文巾解题 67. 二进制求和
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 題目描述
2 解題思路
2.1 整數(shù)相加過渡
將A,B轉(zhuǎn)化為整數(shù)(使用迭代實現(xiàn)),然后將A+B轉(zhuǎn)換成二進(jìn)制的字符串
返回的內(nèi)容從第二個下標(biāo)開始,是為了剔除bin()函數(shù)返回的'0b'這兩個字符串
class Solution:def addBinary(self, a: str, b: str) -> str:A=0for i in a:A=A*2+int(i)B=0for i in b:B=B*2+int(i) #分別計算A和B對應(yīng)的整數(shù)return(bin(A+B)[2:])2.2 整數(shù)相加過渡(使用int函數(shù))
int(str,n):以n為基,計算字符串str的值
class Solution:def addBinary(self, a: str, b: str) -> str:A=int(a,2)B=int(b,2)return(bin(A+B)[2:])2.3 字符串倒置,一位一位加(同時考慮進(jìn)位的問題)
class Solution:def addBinary(self, a: str, b: str) -> str:a_=a[::-1]b_=b[::-1]carry=0 #進(jìn)位lstr='' #返回的字符串for i in range(min(len(a),len(b))):tmp=int(a_[i])+int(b_[i])+carryif(tmp>1):carry=1tmp=tmp-2else:carry=0#看是否有進(jìn)位lstr+=str(tmp)if(len(a)>min(len(a),len(b))):for i in range(min(len(a),len(b)),len(a)):tmp=int(a_[i])+carryif(tmp>1):carry=1tmp=tmp-2else:carry=0lstr+=str(tmp)#有可能一位計算完了,另一位還有值if(len(b)>min(len(a),len(b))):for i in range(min(len(a),len(b)),len(b)):tmp=int(b_[i])+carryif(tmp>1):carry=1tmp=tmp-2else:carry=0lstr+=str(tmp)if(carry==1):lstr+=str(1)#全部計算完了,如果還有進(jìn)位,在前面補一位return(lstr[::-1])2.4 2.3方法修改版
class Solution:def addBinary(self, a: str, b: str) -> str:a=list(a)b=list(b)carry=0 #進(jìn)位lstr='' #最終要返回的字符串while(True):tmp=0flag=True #flag表示能不能跳出這個循環(huán),如果a,b沒有值,進(jìn)位為0,就能跳出if(len(a)>0):print('a',a)tmp+=int(a.pop())flag=Falseif(len(b)>0):print('b',b)tmp+=int(b.pop())flag=Falseif(carry>0):print('c',carry)tmp+=carryflag=Falseif(tmp>1):carry=1tmp-=2else:carry=0if(flag==True):breaklstr+=str(tmp)return(lstr[::-1])2.5 位運算
先看一下位操作的一些結(jié)論
1)異或操作(位數(shù)不同的話向前補零)
——>結(jié)果是對應(yīng)兩位之間不考慮進(jìn)位的加法結(jié)果
2)與操作(位數(shù)不同的話向前補零)
——>只有x,y對應(yīng)的元素都是1才會得到該位置為1
——>結(jié)果是x,y對應(yīng)位置相加,會不會產(chǎn)生進(jìn)位的情況
然后每一位的進(jìn)位情況,影響的是前一位是否加一,所以與操作的結(jié)果要向左移動一位
然后上一次不考慮進(jìn)位的相加結(jié)果+后一位的進(jìn)位情況,再得到一對不考慮進(jìn)位結(jié)果的+進(jìn)位結(jié)果
依次迭代,直到進(jìn)位情況全部為0,此時沒有進(jìn)位了為止
class Solution:def addBinary(self, a: str, b: str) -> str:A=int(a,2)B=int(b,2)while(B):A,B=A^B,(A&B)<<1 #此時的A,B分別表示兩個數(shù)(數(shù)和進(jìn)位)相加的結(jié)果(不考慮進(jìn)位)、進(jìn)位的結(jié)果return bin(A)[2:]注:在python里面 a,b=c,d 的意思是(a,b)=(c,d),也就是cd同時調(diào)整
總結(jié)
以上是生活随笔為你收集整理的文巾解题 67. 二进制求和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch 实现transforme
- 下一篇: 文巾解题 929. 独特的电子邮件地址