力扣67. 二进制求和算法

一、【写在前面】

这道题需要,给你两个字符串比如

a = "1010", b = "1011"

答案是:"10101"

然后需要你给出计算结果,那么我们很容易想到两种做法

1. 调库做法:直接转化为整数,然后用内置函数做进制转换直接计算出结果

2. 计算做法:将十进制思维移植过来,对每一位加并且做carry操作,最后得出结果

笔者最初是这么做的,不过这样出来的时间和空间复杂度比较差劲,看到了一种非常巧妙的方法,这里分享给大家。

二、【代码给出】

我把注释写的全一点,这样:这个算法的本质就是不断重复无进位加,直到carryflag没有信息为止。

举个例子,这个例子最后计算出来是1100011

101011 + 111000

首先做无进位加(与),得到:ans = '0b10011' ;carry = 010011 << 1 = '0b1010000'

ans和carry继续做无进位加,得到:ans = '0b1000011' ; carry = 10000 << 1 = '0b100000'

继续重复 ans = '0b1100011';carry = 0 << 1 = '0b0'

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        # carry_flags = 0b0000 # carry_flag 形如xxflag的这种形式会在接触到底层时大量看见
        a , b =int(a,2),int(b,2) # 先做进制转换,转到二进制
        # 预计算一下ans和carry
        # 为什么要用异或,因为异或可以视为没有进位的加法
        # 然后把进位信息存到carryflag中,直接做“与”,同1为1,然后左移一位,刚好可以作为进位,是不是很巧妙
        ans , carry_flags = a^b ,  (a&b) << 1    
        while carry_flags:    # 然后就是不断重复carry和ans的无进位加,直到没有进位信息,加法就完成了
            temp_ans =  ans ^ carry_flags
            carry_flags = (ans&carry_flags) << 1
            ans = temp_ans
        return bin(ans)[2::]    # 直接返回会有0b1111,可以类比0xfff,所以需要切掉前面两个字符

相关推荐

  1. 位运算-67. 二进制求和

    2024-01-13 11:12:01       13 阅读
  2. 67 二进制求和 C语言

    2024-01-13 11:12:01       11 阅读
  3. 每日OJ题_字符串③_67. 二进制求和

    2024-01-13 11:12:01       22 阅读
  4. 算法题】67. 二进制求和

    2024-01-13 11:12:01       34 阅读
  5. 二进制求和算法(leetcode第67题)

    2024-01-13 11:12:01       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 11:12:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 11:12:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 11:12:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 11:12:01       18 阅读

热门阅读

  1. pythonrequests用法

    2024-01-13 11:12:01       32 阅读
  2. 【C】存储类别(作用域、链接、存储期)

    2024-01-13 11:12:01       33 阅读
  3. js null和undefined的区别

    2024-01-13 11:12:01       28 阅读
  4. CNAS中兴新支点——软件验收测试功能有哪些

    2024-01-13 11:12:01       33 阅读
  5. Qt QML和QWidget混合编程(面试亮点)

    2024-01-13 11:12:01       37 阅读
  6. [论文笔记] PAI-Megatron中qwen和mistral合并到Megtron-LM

    2024-01-13 11:12:01       40 阅读
  7. openssl3.2 - 官方demo学习 - client-conf.c

    2024-01-13 11:12:01       31 阅读
  8. Python中的图像处理和计算机视觉应用

    2024-01-13 11:12:01       35 阅读
  9. PyQt UI 信号槽函数重复执行问题

    2024-01-13 11:12:01       35 阅读
  10. Spring面试题目

    2024-01-13 11:12:01       31 阅读