difficulty:簡單
編寫乙個函式,輸入是乙個無符號整數(以二進位制串的形式),返回其二進位制表示式中數字位數為 '1' 的個數(也被稱為)。
高階:
示例 1:
示例 2:輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 '1'。
示例 3:輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進位制串 00000000000000000000000010000000 中,共有一位為 '1'。
輸入: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。
解法二:因為給定的二進位制串的長度是32,所以迴圈尋找32次就ok了。class solution:
def hammingweight(self, n: int) -> int:
res = 0
while n:
res += 1
n = (n - 1) & n
return res
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...