給定兩個二進制字符串,返回他們的和(用二進制表示)。
輸入為非空字符串且只包含數字 1
和 0
。
示例 1:
輸入: a = "11", b = "1" 輸出: "100"
示例 2:
輸入: a = "1010", b = "1011" 輸出: "10101"
- 解題思路
先將字符串轉換為整數再轉化為十進制數,進行相加后,再轉換回二進制數
def addBinary(a, b): x=int(a)#轉換為整數 y=int(b) sum=0 s=0 if a=='0' and b=='0': return '0' if a=='0': for j in range(len(b)): t = y % 10 s += t * (2 ** j) y = y // 10 t=s elif b=='0': for i in range(len(a)): # 十進制轉二進制 z = x % 10 sum += z * (2 ** i) x = x // 10 t=sum else: for i in range(len(a)):#十進制轉二進制 z=x%10 sum+=z*(2**i) x=x//10 for j in range(len(b)): t= y % 10 s += t*(2 ** j) y= y// 10 t=sum+s l=[] res='' for i in range(t):#二進制轉十進制 n=t%2 m=t//2 if m!=0: l.append(n) else: l.append(n) break t=t//2 # print(total) l.reverse() for i in l: res+=str(i) return res
但這樣循環次數太多,效率太低,參考了別人的代碼發現二進制,十進制間可以直接轉換
print(int(a,2))#二進制轉十進制,a為字符串格式如'111' print(bin(2))#十進制轉二進制
注:bin()轉換后的數據類型為'str'
- 大神的實現代碼
sum=int(a,2)+int(b,2) res=bin(sum)# return res[2:]#十進制轉換為二進制后為'0bxxx',因此要去掉前兩位