剑指 Offer 15. 二进制中1的个数693. 交替位二进制数
Posted 南岸青栀*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer 15. 二进制中1的个数693. 交替位二进制数相关的知识,希望对你有一定的参考价值。
剑指 Offer 15. 二进制中1的个数
法1:转换为字符串形式,计数“1”
class Solution:
def hammingWeight(self, n: int) -> int:
#法1:转换为字符串形式,计数“1”
# n = str(bin(n))[2::]
# print(n)
# res = 0
# for s in n:
# if s == "1":
# res += 1
# return res
法2:位运算,依次右移
class Solution:
def hammingWeight(self, n: int) -> int:
res = 0
while n > 0:
res += (n & 1)
n = n >> 1
return res
#法2:不断循环右移
res = 0
while n > 0:
if n%2 != 0:
res += 1
n = n >> 1
return res
python一行:不解释
class Solution:
def hammingWeight(self, n: int) -> int:
return sum(map(int,bin(n)[2::]))
693. 交替位二进制数
法1:位运算
class Solution:
def hasAlternatingBits(self, n: int) -> bool:
#右移一位后异或,若为10间隔则全为1
tmp = n ^ (n >> 1)
#判断tmp是否全为1
return tmp&(tmp + 1) == 0
法2:转为二进制字符串判断“11” or “00” 是否存在
存在“11”or“00”则说明不满足
class Solution:
def hasAlternatingBits(self, n: int) -> bool:
return not ("11" in str(bin(n))[2::] or "00" in str(bin(n))[2::])
以上是关于剑指 Offer 15. 二进制中1的个数693. 交替位二进制数的主要内容,如果未能解决你的问题,请参考以下文章
Lc_剑指Offer15二进制中1的个数--------位运算