leetcode-67. 二进制求和

题目

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。

解题思路

字符串相关的简单题,可以直接用python内置的方法,把字符串转为十进制整数,相加,再转为二进制字符串来完成。

这里不用内置的方法,采用按位相加。基本思路和自己手写十进制字符串相加一样

代码

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        carry = 0
        result = ''
        a_list, b_list = list(a), list(b)
        while a_list and b_list:
            a_item, b_item = a_list.pop(), b_list.pop()
            result += str(int(a_item) ^ int(b_item) ^ carry)
            if collections.Counter(a_item + b_item + str(carry))['1'] >= 2:
                carry = 1
            else:
                carry = 0
        print(result, carry, a_list, b_list)
        while a_list:
            a_item = a_list.pop()
            result += str(int(a_item) ^ carry)
            if collections.Counter(a_item + str(carry))['1'] >= 2:
                carry = 1
            else:
                carry = 0
        print(result, carry, a_list, b_list)
        
        while b_list:
            b_item = b_list.pop()
            result += str(int(b_item) ^ carry)
            if collections.Counter(b_item + str(carry))['1'] >= 2:
                carry = 1
            else:
                carry = 0
        print(result, carry, a_list, b_list)
        if carry:
            result += str(carry)
        return result[::-1]

你可能感兴趣的:(OJ题目记录)