一、 476. 数字的补数
根据题意写即可
代码
class Solution:
def findComplement(self, num: int) -> int:
l = list(bin(num)[2:])
for i in range(len(l)):
if l[i]=='0':
l[i]='1'
else:
l[i]='0'
return int("0b"+"".join(l),2)
位运算
class Solution:
def findComplement(self, num: int) -> int:
i = ans = 0
while num:
if not num & 1:
ans += 1 << i
num >>= 1
i += 1
return ans
二、191. 位1的个数
代码
数二进制形式1的个数
class Solution:
def hammingWeight(self, n: int) -> int:
return bin(n).count('1')
位运算
如果n&1=1,则n的最右一位为1
如果n&1=0,则n的最右一位为0
逐位求1,求和
class Solution:
def hammingWeight(self, n: int) -> int:
ans = 0
while n:
ans += n&1
n >>= 1
return ans
三、693. 交替位二进制数
代码
class Solution:
def hasAlternatingBits(self, n: int) -> bool:
s = bin(n)[2:]
for i in range(len(s)-1):
if s[i]+s[i+1]=="00" or s[i]+s[i+1]=="11":
return False
return True
位运算
class Solution:
def hasAlternatingBits(self, n: int) -> bool:
return not (a := n ^ (n >> 1)) & (a + 1)