一、题目描述
给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
二、解题思路过程
class Solution:
def addBinary(self, a: str, b: str) -> str:
if a=='0': return b # 如果a为0,直接返回b
elif b=="0": return a # 如果b为0,直接返回a
n=0 # 定义一个n作为计算的位置
l=max(len(a),len(b)) # 计算出a和b的最大长度
s=str(int(a)+int(b)) # 把a和b直接相加再转化成字符串
for i in range(l-1,-1,-1): # 后序遍历,因为二机制计算,最大位数要比l大1,所以要遍历到-1
'''
因为二进制只有1和0,所以,要把大于1的数进行计算,
又因为在后面的计算中,要进行进位操作,所以,该位置的数字最大可以为3
不管该位置数字是2还是3,都需要进1并且转化为0或1,也就是该位置数字-2
+10-2也就是+8
要在数字的哪个位数上进行操作,由10的n次幂决定
每次执行一次循环,n都加1
'''
if s[i]=='2' or s[i]=='3':
s=str(int(s)+(8*(10**n)))
n+=1
return s
三、复杂度分析
时间复杂度:,n为a或b的最大长度
空间复杂度:,使用的额外空间复杂度为常数。
四、题目来源
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-binary