20170218-leetcode-067:Add Binary


     比较简单的一道题,但是感觉代码有些冗余,不过现阶段只能写出这样的代码了,需要注意的是考虑进位的问题,应当把进位放到循环里面:主要的思路是:把字符串变成单个数字放到list中,然后reverse,把两个list补全成等长的,然后从第一个数字相加,添加到另外的一个list,考虑进位,最后再reverse,然后变成int,去掉多余的0,再变成str类型。

67.问题表述
Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

Subscribe to see which companies asked this question.

#code
class Solution:
    def __init__(self):
        self.list_a = []
        self.list_b = []
        self.list_c = []

    def list_array(self, x):
        list_x = []
        for i in range(len(x)):
            list_x.append(int(x[i]))
        list_x.reverse()
        return list_x

    def makeup(self, m, n):
        while abs(len(m) - len(n)) > 0:
            if len(m) - len(n) > 0:
                n.append(0)
            else:
                m.append(0)

    def arraylistAdd(self, m, n):
        c = []
        length = len(m)
        carrybit=0
        for i in range(0, length):
            c.append((m[i] + n[i] + carrybit) % 2)
            carrybit = int((carrybit + m[i] + n[i]) / 2)
        c.append(carrybit)
        c.reverse()
        return c

    def list2str(self, list_x):
        string = ''
        for i in range(len(list_x)):
            string += str(list_x[i])
        return str(int(string))

    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        self.list_a = self.list_array(a)
        self.list_b = self.list_array(b)
        self.makeup(self.list_a, self.list_b)
        self.list_c = self.arraylistAdd(self.list_a, self.list_b)
        str_c = self.list2str(self.list_c)
        return str_c

编写完成之后,看了看其他人写的代码,实在是简洁,看起来也很舒服

class Solutionbit(object):
    def addBinary(self, a, b):
        if len(a) == 0 or len(b) == 0:
            return a + b
        a_2 = int(a, 2)
        b_2 = int(b, 2)
        carrybit = 1
        while carrybit != 0:
            carrybit = (a_2 & b_2) << 1
            a_2 = a_2 ^ b_2
            b_2 = carrybit
        return bin(a_2)[2:]

#其中int(a,2),把字符串a看做是二进制,然后用10进制表示出来
#计算carrybit的方法很独特,使用与的方式然后左移一位
#再通过异或的方法计算数字位,把进位复制给b_2,循环
#bin(a_2)[2:]把字符串a_2表示成二进制取字符串


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值