劍指offer刷題-數二進位制表示中1的個數
阿新 • • 發佈:2018-12-13
題目描述
時間限制: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)。 “模”實質上是計量器產生“溢位”的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數。任何有模的計量器,均可化減法為加法運算。
因此完整的程式碼如下
# -*- coding:utf-8 -*-
def intToBin32(i):
#return (bin(((1 << 32) - 1) & i)[2:]).zfill(32) # 也可以使用這個方法計算補碼
return (bin((1 << 32) - abs(i)))
class Solution:
def NumberOf1(self, n):
# write code here
if n <0:
s = '%s' % intToBin32( n)
else:
s = '%s' % bin(n)
return s.count('1')