赞
踩
来源:力扣(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)位运算
占坑
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。