LeetCode 191 位1的個數

2022-06-27 06:45:11 字數 1385 閱讀 8238

difficulty:簡單

編寫乙個函式,輸入是乙個無符號整數(以二進位制串的形式),返回其二進位制表示式中數字位數為 '1' 的個數(也被稱為)。

高階

示例 1:

輸入:00000000000000000000000000001011

輸出:3

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

示例 2:

輸入:00000000000000000000000010000000

輸出:1

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

示例 3:

輸入:11111111111111111111111111111101

輸出:31

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

solution

此題與劍指offer的一道題相同。

規律:我們發現把乙個整數減去1,都是把最右邊的1變成0。如果它的右邊還有0的話,所有的0都變成1,而它左邊所有位都保持不變。

把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0。那麼乙個整數的二進位制表示中有多少個1,就可以進行多少次這樣的操作

還是以前面的1100為例,它減去1的結果是1011。我們再把1100和1011做位與運算,得到的結果是1000。我們把1100最右邊的1變成了0,結果剛好就是1000。

class solution:

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

res = 0

while n:

res += 1

n = (n - 1) & n

return res

解法二:因為給定的二進位制串的長度是32,所以迴圈尋找32次就ok了。

class solution:

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

res = 0

flag = 1

for _ in range(32):

if n & flag: # 如果最低位是0那麼與位運算的結果不是0,否則結果為0

res += 1

flag <<= 1

return res

Leetcode191 位1的個數

題目 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 輸入 11111111111111111111111111111101 輸出 31 解釋 輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為...

LeetCode 191 位1的個數

題意 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 lowbit n 定義為非負整數 n nn 在二進位制表示下最低位的 1 11 及其後邊所有的 0 00 構成的數值。方法一 n n 1 作用 將 n nn 的二進位制表示中最低位的 1 11 ...

LeetCode191 位1的個數

編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 1 輸入 0...