来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
(1)
先将 a和 b 转化成十进制数,求和后再转化为二进制数。
class Solution:
def addBinary(self, a, b) -> str:
#int(a,2)将a从二进制转化为10进制 bin十进制转为二进制 转化后多了0b前缀,所以用字符串截取
# return bin(int(a, 2) + int(b, 2))[2:]
return '{0:b}'.format(int(a, 2) + int(b, 2)) #format格式化输出,将0个位置的输出为二进制数b
(2)模拟
链接:https://leetcode-cn.com/problems/add-binary/solution/fu-xue-ming-zhu-qiu-jia-fa-ti-mu-kan-zhe-h4kx/
借鉴「列竖式」的方法,末尾对齐,逐位相加。在十进制的计算中「逢十进一」,二进制中我们需要「逢二进一」
class Solution(object):
def addBinary(self, a, b):
res = ""
carry = 0
i = len(a) - 1
j = len(b) - 1
while i >= 0 or j >= 0 or carry != 0:
if i >= 0:
digitA = int(a[i]) # i从大到小,从后往前计数
else:
digitA = 0
if j >= 0:
digitB = int(b[j])
else:
digitB = 0
sum_res = digitA + digitB + carry
if sum_res >= 2: # 满2进位,当前位置0
carry = 1 # 进位
sum_res = sum_res - 2 # 当前位置0
else:
carry = 0
res += str(sum_res)
i -= 1
j -= 1
return res[::-1] # 逆序输出
(3)位运算
占坑