剑指 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. 交替位二进制数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--15二进制中1的个数

剑指 Offer 15. 二进制中1的个数

Lc_剑指Offer15二进制中1的个数--------位运算

剑指 Offer 15. 二进制中1的个数

Leetcode---剑指Offer题15---二进制中1的个数

Leetcode---剑指Offer题15---二进制中1的个数