【leetcode】Python实现-67.二进制求和

67.二进制求和

描述

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

示例1

输入: a = “11”, b = “1”
输出: “100”

示例2

输入: a = “1010”, b = “1011”
输出: “10101”

        buff = 0
        s = ''
        flag = 1
        flag1 = 1
        l = min(len(a), len(b))
        if len(a) > len(b):
            temp = a[len(a) - l:]
            min_string = b
            other = a[:len(a) - l]
        elif len(a) < len(b):
            temp = b[len(b) - l:]
            min_string = a
            other = b[:len(b) - l]
        else:
            flag1 = 0
            temp = a
            min_string = b
        for i in range(l - 1, -1, -1):
            if buff == 0:
                if temp[i] == min_string[i] == '0':
                    s += '0'
                    buff = 0
                elif temp[i] == min_string[i] == '1':
                    s += '0'
                    buff = 1
                else:
                    s += '1'
                    buff = 0
            else:
                if temp[i] == min_string[i] == '0':
                    s += '1'
                    buff = 0
                elif temp[i] == min_string[i] == '1':
                    s += '1'
                    buff = 1
                else:
                    s += '0'
                    buff = 1
        if not flag1:
            if buff == 1:
                s += '1'
        elif not buff:
            s += other[::-1]
        else:
            for j in range(len(other) - 1, -1, -1):
                if other[j] == '0':
                    s += '1'
                    if j == 1:
                        s+=other[:1]
                    else:
                        other = other[:j]
                        s += other[::-1]
                    flag = 0
                    break
                else:
                    s += '0'
                    if j == 0:
                        s += '1'
        return s[::-1]

代码调了两个多小时,越写越复杂,终于通过。错误主要出现在切片反转。结果一看别人的就两行代码,扎心了!
两行代码

        a, b = int('0b' + a, 2), int('0b' + b, 2)
        return bin(a + b)[2:]

emmm…我该说什么呢。哈哈哈让我们看看一行代码的吧!!

        return bin(int(a,2)+int(b,2))[2:]

还有另外长一点但比我短的代码,是将a,b反转过来,这样列表切片方便。
int()函数用于将一个字符串或数字转换为整型。语法:
class int(x, base)
x–字符串或数字
base–进制数,默认十进制。
bin()函数返回一个整型int或者长整数long int的二进制表示。

bin()运算返回的是二进制。所以前两位是二进制的标志,需要[2:]去除。

猜你喜欢

转载自blog.csdn.net/qq_34364995/article/details/80284339