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

你可能感兴趣的:(LeetCode刷题笔记(九)位运算)