记录-二进制求和-位运算

原题:https://leetcode.cn/problems/add-binary/description/

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"
输出:"100"

示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '0' 或 '1' 组成
  • 字符串如果不是 "0" ,就不含前导零

思路

①用0补齐a,b中长度较短的一方,使得a,b长度相同。
②构造一个a的长度+1的全0字符串,按位填充求和结果
③同时反向遍历a,b的每一位,将按位异或结果填充进全0字符串,同时进位也要与前一位异或运算
④把结果中无用前缀0去掉,输出结果

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        if len(a)<len(b):
            a,b=b,a#确保a长度大于等于b
        while len(a)!=len(b):
            b='0'+b#补前缀0
        co=0#初始化进位
        total=list('0'*(len(a)+1))#初始化结果字符串
        for i in range(len(a)-1,-1,-1):#反向遍历a,b
            if a[i]==b[i]=='1':#先判断进位
                co=1
            else:
                co=0
            if co==1:
                total[i+1]=str(int(a[i])^int(b[i])^int(total[i+1]))
                total[i]=str(int(total[i])^co)
                co=0#重置进位为0
            else:
                if int(a[i])^int(b[i])==1 and total[i+1]=='1':
                    total[i]=str(int(total[i])^1)#特殊处理首位进一
                total[i+1]=str(int(a[i])^int(b[i])^int(total[i+1]))
        s=''.join(total)
        index=s.find('1')#前缀0去掉
        return s[index:]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值