原题—–链接
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:“
Input: a = "11", b = "1"
Output: "100"
示例 2:
Input: a = "1010", b = "1011"
Output: "10101"
Python代码实现:
思路分析:
1.直接转化为二进制求解:
2.不转换进制,用字符串的技巧解答:
- 先求出两个字符串中长度,比较两者,取其长者放入下一步,将短者前面补0
- 然后将两个字符串从后向前切片相加,若大于等于2,则进1,若小则不进,以此类推,直到最前面一个,若相加还大于等于2,则再往最前面插入一个1.
1.直接转换为2进制计算
class Solution:
def addBinary(self, a, b):
#2进制转换成10进制,再求和
intNum=int(a,2)+int(b,2)
return bin(intNum)[2:]
2.不转换进制,用字符串的技巧解答:
class Solution:
def addBinary(self, a, b):
a1 = len(a)
b1 = len(b)
if a1>=b1:
m = len(a)
for i in range(1,len(a)-len(b)+1):
b='0'+b
else:
m =len(b)
for i in range(1,len(b)-len(a)+1):
a='0'+a
x = y = z = 0
c = []
for i in range(1, m + 1):
if int(a[-i]) + int(b[-i]) + z == 2:
z = 1
c.insert(0, 0)
if i == len(a):
c.insert(0,1)
elif int(a[-i]) + int(b[-i]) + z > 2:
z = 1
c.insert(0, 1)
if i == len(a):
c.insert(0,1)
else:
c.insert(0, int(a[-i]) + int(b[-i])+z)
z =0
return ''.join(str(i) for i in c)