LeetCode刷题笔记(九)位运算

九. 位运算

位运算不需要转换成10进制, 因此处理速度非常快。
实战常用位运算

  • x & 1 == 1 判断奇偶 ( x % 2 == 1 )
  • x = x & (x-1) 清零最低位的1
  • x & -x 得到最低位的1
67. 二进制求和

题目:给你两个二进制字符串,返回它们的和(用二进制表示)。

    def addBinary(self, a: str, b: str) -> str:
        x, y = int(a, 2), int(b, 2) # 直接转成2进制的int型
        while y: # 直到进位问题都处理ok
            answer = x ^ y 
            carry = (x & y) << 1 # 注意进位
            x, y = answer, carry
        return bin(x)[2:] # 转成10进制的int型
190. 颠倒二进制位

题目:颠倒给定的 32 位无符号整数的二进制位。

    def reverseBits(self, n: int) -> int:
        res = 0
        for i in range(0, 32): # 0~31位共32位       
            if n & 1 == 1:
                res += math.pow(2, 31-i) # 求和
            n = n >> 1
        return int(res) 
191. 位1的个数

题目:位1的个数
思考:编码理论里的汉明重问题

def hammingWeight(self, n: int) -> int:
    ret = 0
    while n: # 直到n=0
        n &= n - 1 # 清零最低位的1
        ret += 1
    return ret
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容