【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:]去除。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com