更多题目移步【力扣简单题】
题目
难度:★☆☆☆☆
类型:数组
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
解答
本题相当于实现:
class Solution:
def addBinary(self, a: str, b: str) -> str:
return bin(int(a,2)+int(b,2))[2:]
这里,我们将两个字符串转为相同长度,然后直接进行字符串相加。
class Solution:
def addBinary(self, a: str, b: str) -> str:
# 短字符串前端补零,保证两者长度相等
if len(a) > len(b):
b = '0'* (len(a)-len(b)) + b
elif len(a) < len(b):
a = '0'* (len(b) - len(a)) + a
res, carry = '', '0'
for a_, b_ in reversed(list(zip(a, b))):
if a_ == '0' and b_ == '0': # 当前位两个数都是0
r = carry
carry = '0'
elif a_ == '1' and b_ == '0' or a_ == '0' and b_ == '1': # 当前位两个数不同
r = '1' if carry == '0' else '0'
carry = '1' if carry == '1' else '0'
else: # 当前位两个数都是1
r = '1' if carry == '1' else '0'
carry = '1'
res = r + res
if carry == '1': # 如果还有进位
res = '1' + res
return res
如有疑问或建议,欢迎评论区留言~