Leetcode 67 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 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',因此要去掉前两位