Leetcode 67. Add Binary 二进制求和
标签: Leetcode
题目地址:https://leetcode-cn.com/problems/add-binary/
题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
算法思想
类似于上面的加1的题目,其实就是按照我们小时候的手动加法操作即可,用一个进位,然后从右向左边逐位计算。需要注意的是可能两个数字的长度不一样,这个时候需要把长的那个继续向前计算,如果有进位注意加上进位。
python代码
class Solution(object):
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
res = ""
la = len(a) - 1
lb = len(b) - 1
count = 0 # 进位
while la>=0 and lb>=0:
tmp = int(a[la]) + int(b[lb]) + count
res = str(tmp%2) + res
count = tmp//2
la -=1
lb -=1
if la<0: # 都统一到a上面进行操作
la = lb
a = b
while la>=0:
tmp = int(a[la]) + count
res = str(tmp % 2) + res
count = tmp // 2
la -= 1
if count>0:
res = str(count) + res
return res