LeetCode练习——其他(位1的个数)

本文介绍了计算无符号整数二进制表示中'1'的个数(汉明重量)的几种方法,包括使用库函数、右移运算以及消除二进制末尾1的策略。这些算法优化了计算效率,适用于频繁调用的场景。详细解释了每个解法的工作原理,并提供了力扣(LeetCode)的相关链接。
摘要由CSDN通过智能技术生成

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
进阶:
如果多次调用这个函数,你将如何优化你的算法?
在这里插入图片描述

官方解法:

解法一:库函数
在这里插入图片描述

class Solution(object):
    def hammingWeight(self, n):
        return bin(n).count("1")

解法二: 右移 32 次

class Solution:
    def hammingWeight(self, n: int) -> int:
        ret = sum(1 for i in range(32) if n & (1 << i)) 
        return ret
class Solution(object):
    def hammingWeight(self, n):
        res = 0
        while n:
            res += n & 1 # 使用 n & 1 得到二进制末尾是否为 1
            n >>= 1 # 把 n 右移 1 位,直至结束。
        return res

在这里插入图片描述
解法三:消除二进制末尾的 1
详解:https://leetcode-cn.com/problems/number-of-1-bits/solution/fu-xue-ming-zhu-xiang-jie-wei-yun-suan-f-ci7i/

class Solution(object):
    def hammingWeight(self, n):
        res = 0
        while n:
            res += 1
            n &= n - 1
        return res

力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn1m0i/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值