前言:剑指offer刷题系列
问题:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。
示例:
输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
- 输入必须是长度为
32的 二进制串 。
思路1:
计算二进制数的1的个数,hammingweight函数里面的n是int类型的,要想得到对应的二进制数据,必须转换一下,python存在内置的二进制转换函数bin()函数,又由于编写的这个函数返回的也需要是Int类型数据,表示二进制中1的个数,使用count()函数,计算二进制数据1的个数。
基于上述思考,代码如下:
class Solution:
def hammingWeight(self, n: int) -> int:
return bin(n).count('1')
执行结果如下图1:
计算二进制数的1的个数,hammingweight函数里面的n是int类型的,要想得到对应的二进制数据,必须转换一下,python存在内置的二进制转换函数bin()函数,又由于编写的这个函数返回的也需要是Int类型数据,表示二进制中“1”的个数,使用count()函数,计算二进制数据“1”的个数。
思路2:
使用位移和按位与运算:可以利用位移和按位与运算来逐位检查输入的整数中有多少个’1’。
可以用一个循环,每次将输入的整数右移一位,并与1进行按位与运算,如果结果为1,说明该位是’1’,则计数器加一;如果结果为0,说明该位是’0’,则不做操作。当输入的整数变为0时,循环结束,返回计数器的值。
基于上述思考,代码如下:
class Solution:
def hammingWeight(self, n: int) -> int:
res = 0
while n:
res += n & 1
n >>= 1
return res
执行结果如下图:
使用按位与的方法,执行的效果会更差一些。
学到的知识点:
- 什么是汉明重量:汉明重量是一个计算机科学的概念,它表示一个二进制数中’1’的个数。例如,1011的汉明重量是3,因为它有三个’1’。汉明重量有许多应用,如错误检测和纠正、密码学、信息论等。
- 如何使用Python语言进行位运算:位运算是一种在二进制层面上对数字进行操作的方法,它可以提高运算的效率和速度。Python语言提供了一些位运算符,如按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>),关于左移和右移,记住尖尖朝哪边就往哪边移。