剑指offer/Python版、JZ11/二进制中1的个数,解题思路详述
题目:二进制中1的个数
题目描述:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
示例
输入:10 #二进制位0…1010
返回值:2 #1的个数为2
解题思路
本题的解决思路主要是采用按位与运算的思想,首先我们先看一下什么是按位与运算,按位与运算:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。其符号表示为&。
下面简单文字介绍一下本题的解决思路,我们知道1不论是多少位二进制,它只有最后一位是1,其余全是0。所以我们可以将所给数值的32位二进制与1进行按位与操作,记下此时的状态(0/1)。状态0表示该数值的二进制最后一位为0,状态1表示该数值的二进制最后一位为1。然后将该数值的二进制表示逐步往右移动一步,共移动32次(移动次数根据题目所给的多少位确定)。因为我们的目的是为了获得该数值二进制中1的个数,所以我们可以用变量count记录从开始到移动结束后(移动了32次)为1的个数。具体做法可见下述代码部分。
代码实现
-*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
for i in range(32):
count += n & 1
n = n >> 1
return count
如果你看完后有所收获,欢迎点赞转发,若文章存在错误,欢迎指正。