美文网首页LeetCode刷题笔记
LeetCode刷题笔记(九)位运算

LeetCode刷题笔记(九)位运算

作者: YongtaoHuang | 来源:发表于2021-08-11 00:16 被阅读0次

    九. 位运算

    位运算不需要转换成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
    

    相关文章

      网友评论

        本文标题:LeetCode刷题笔记(九)位运算

        本文链接:https://www.haomeiwen.com/subject/bxoivltx.html