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” ,就都不含前导零。

#最直观的思路
设flag为进位标志,若有进位则flag=1,反之则为0
随后在while里倒序遍历两个字符串
while里面前两句是判断一下字符串是否已遍历完毕,如果遍历完毕,则直接赋予个0值
随后用两个值相加并且加上flag值
如果大于等于2,则代表有进位,将c进行取余操作,并且将进位符置为1
随后将c值插入到ans的首位
循环此过程直到两个字符串都遍历完毕
最后判断flag是否等于1,等于1的话则需要在首位补一个1

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        flag = 0
        i = 0
        ans = []
        while len(a)-1-i >=0 or len(b)-1-i >= 0:
            a_value = int(a[len(a)-1-i]) if len(a)-1-i >= 0 else 0
            b_value = int(b[len(b)-1-i]) if len(b)-1-i >= 0 else 0
            # print(a_value, b_value)
            c = a_value + b_value + flag
            if c >= 2:
                c = c%2
                flag = 1
            else:
                flag = 0
            ans.insert(0, c)
            i += 1
        if flag == 1:
            ans.insert(0, 1)
        ans = ''.join('%s' %id for id in ans)
        return ans

#超简洁的方法
利用python中的2进制操作
直接进行2进制相加

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

你可能感兴趣的:(力扣LeetCode,字符串,python,leetcode,算法,二进制求和)