剑指offer刷题-数二进制表示中1的个数
2019-04-13 16:45发布
生成海报
题目描述
时间限制:1秒 空间限制:32768K 热度指数:294626
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
当n>0时,就容易处理了
s = '%s' % bin(n)
return s.count('1')
即可
n<0的时候要计算n的补码
模 = abs(n) + n的补码
n的补码 = 模 - abs(n)
其中模的概念如下
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2(n)-1,模=2(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。
因此完整的代码如下
def intToBin32(i):
return (bin((1 << 32) - abs(i)))
class Solution:
def NumberOf1(self, n):
if n <0:
s = '%s' % intToBin32(n)
else:
s = '%s' % bin(n)
return s.count('1')
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮