Add Binary

模拟二进制数的加法操作过程

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        length=0
        i=len(a)-1
        j=len(b)-1
        s=""
        #循环之前主要对进位标志carry进行初始化
        if int(a[i])+int(b[j])>=2:#若最后一位相加大于2,
            s=str(int(a[i])+int(b[j])-2)+s#则本位置为str(int(a[i])+int(b[j])-2)
            carry=1#并标记 进位位为1
        else:#若最后一位相加小于2
            s=str(int(a[i])+int(b[j]))+s
            carry=0#carry代表没有进位
        i=i-1
        j=j-1
        while i>=0 and j>=0: #从倒数第二位开始
            if int(a[i])+int(b[j])+carry>=2:#某位次上的数和进位位相加大于等于2
                s=str(int(a[i])+int(b[j])+carry-2)+s#则依次置本位为str(int(a[i])+int(b[j])+carry-2)
                carry=1#并拼接字符串,然后置进位位标志为1
            else:#int(a[i])+int(b[j])+carry<2,z则本位置为str(int(a[i])+int(b[j])+carry)
                s=str(int(a[i])+int(b[j])+carry)+s#并拼接字符串
                carry=0 #置进位位标志为0
            lenght=length+1
            i=i-1#下标依次减1
            j=j-1
        if( i != -1):#如果a的位数较多,则继续进行循环,把多余的位数相加
            while(i>=0 ):
                if int(a[i])+carry>=2:
                    s=str(int(a[i])+carry-2)+s
                    carry=1
                else:
                    s=str(int(a[i])+carry)+s
                    carry=0
                i=i-1
        if( j != -1):#如果b的位数较多,处理过程相似
            while(j>=0 ):
                if int(b[j])+carry>=2:
                    s=str(int(b[j])+carry-2)+s
                    carry=1
                else:
                    s=str(int(b[j])+carry)+s
                    carry=0
                j=j-1
        if( carry == 1):#如果carry为1,则说明有进位,在结果的最前边加1
            s="1"+s
        return s

看见大神写的代码,膜拜,简单明了,留下我一人在风中凌乱

class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        return bin(int(a,2)+int(b,2))[2:]

int()函数用于将字符串转化为数字,第一个参数为要转化的字符串,第二个参数n为代表的n进制,int(str,n)代表将n进制的字符串str转化为十进制数。
bin()函数用于十进制整数转化为二进制的字符串,其中该字符串的前两位为”0b”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值