hamming weight 二進位制中1的個數

2021-10-17 01:29:11 字數 1465 閱讀 9595

題目描述:

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。

示例 1:

輸入:00000000000000000000000000001011

輸出:3

解釋:輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 '1'。

示例 2:

輸入:00000000000000000000000010000000

輸出:1

解釋:輸入的二進位制串 00000000000000000000000010000000 中,共有一位為 '1'。

示例 3:

輸入:11111111111111111111111111111101

輸出:31

解釋:輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為 '1'。

解法一(使用庫函式):

直接使用庫函式,**如下:

class solution:

def hammingweight(self, n: int) -> int:

return bin(n).count('1')

解法二(向右移位):

用最低位和1取」與「操作可判斷該位是否為1,然後不斷將n右移重複這一過程直到n為0。該方法的**如下,但是無法處理負數問題。

class solution:

def hammingweight(self, n: int) -> int:

cnt = 0

while n > 0:

cnt += n & 1

n = n >> 1

return cnt

解法三(將1 不斷左移):

對輸入的n的二進位制串,首先將其最低位與1進行」與「操作來判斷其最低位是否為1,然後將1不斷左移至二進位制的最高位即可返回。

**如下:

class solution:

def hammingweight(self, n: int) -> int:

cnt = 0

x = 1

for i in range(len(bin(n))-2):

if x & n: cnt += 1

x = x << 1

return cnt

解法三(不斷去掉最後乙個1):

把乙個整數減去1之後再和原來的整數做按位與運算,得到的結果相當於把整數的二進位制表示中最右邊的1變成0。這裡實際輸入數字中有多少個1,就做多少次迴圈。

**如下:

class solution:

def hammingweight(self, n: int) -> int:

cnt = 0

while n:

cnt += 1

n = (n-1) & n

return cnt

操作二進位制寫入二進

操作二進位制 寫入二進位制 1 宣告變數 sqlite3 stmt stat 2 把sql語句解析到stat結構中去 sqlite3 prepare 3 繫結替換 sqlite3 bind blob 4 儲存到資料庫 int result sqlite3 step 5 釋放stat結構 sqlite...

mysql儲存二進位制 mysql 儲存二進位制資料

晚上小研究了下mysql儲存於讀取二進位制資料的功能。關鍵步驟為以下三點 最重要的一點 儲存二進位制資料的表的型別需要是blob型別 按長度不同分為tiny,media,long 插入二進位制資料時需要利用mysql real escape string函式對資料進行轉換 從資料庫中讀取二進位制資料...

mysql 二進位製流 用mysql儲存二進位制資料流

用mysql儲存二進位制資料流,閱讀用mysql儲存二進位制資料流,近日一專案遇到需要在db中儲存2進製資料流型別檔案的問題,發現常用的mysql api都用不了,再研究,方知有一套專門的api來幹這種資料,功能相當強大的說。以下即為範例 按照說明編譯即可用,稍加修改即可儲存2進製檔案 mysql資...