数组-67.二进制求和

1.题目

给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。

示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”

2.思路

(1) 将二进制转换成十进制求和。

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        return '{0:b}'.format(int(a, 2) + int(b, 2))

(2) 逐位相加
安位相加,标记进位。

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        n = max(len(a), len(b))
        a, b = a.zfill(n), b.zfill(n)   # 右对齐,填充 ‘0’
        carry = 0
        anser = []
        for i in range(n-1, -1, -1):
            if a[i] == '1':
                carry += 1
            if b[i] == '1':
                carry += 1

            if carry % 2:   # 判断是否进位   1%2 = 1; 2%2=0; 0%2=0
                anser.append('1')
            else:
                anser.append('0')
            
            carry //= 2  # 进位标志,向前进一位。
        
        if carry == 1:
            anser.append('1')
        anser.reverse()
        return ''.join(anser)

发布了41 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/niuchi2570/article/details/104503794
今日推荐