Mo_immortal. 2021-10-20 11:28 采纳率: 43.8%
浏览 118
已结题

求解力扣上面的两段代码

源于力扣上面的一道解题的代码,我没有看懂,希望指教,给个详细的代码运行流程,都代表什么意思,谢谢

img

img

  • 写回答

2条回答 默认 最新

  • 广大菜鸟 2021-10-20 14:39
    关注

    第一种最简单的,用int(a,2)的意思是把字符串当二进制,转成10进制,十进制的加了之后结果再转二进制bin(),但要取得二进制结果的字符串的数字部分,因为它是以0b开头的,所以用字符串切片的方式[2:],这个表示截取字符串下标从2开始的部分
    第二种,是按位相加,相当于我们小学开始学的数学题,在纸上加那样

    
    class Solution(object):
        def addBinary(self, a, b):
            """
            :type a: str
            :type b: str
            :rtype: str
            """
            r, p = '', 0  # r是结果字符串,p是进位的中间变量
            d = len(b) - len(a)  # 表示2个字符串长度之差,用'0'对较短的补足 【 '0' * d 】,如果d<=0,则返回''
            a = '0' * d + a
            b = '0' * -d + b
            for i, j in zip(a[::-1], b[::-1]): # 逆序遍历a,b两个字符串的数字
                s = int(i) + int(j) + p # 按位之和
                r = str(s % 2) + r  # 拼接该位的数字和之前的数字,可以看作个位->十位这样的顺序
                p = s // 2  # 看有没有进位
            return '1' + r if p else r # 如果p还不为0,则还要进位,且为1,否则可以直接返回
    
    
    s = Solution()
    print(s.addBinary('1010', '1011'))
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 赞助了问题酬金 10月20日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作