請實現一個函數,輸入一個整數,輸出該數二進制表示中 1 的個數。例如,把 9 表示成二進制是 1001,有 2 位是 1。因此,如果輸入 9,則該函數輸出 2。
示例 1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位爲 '1'。
示例 2:輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位爲 '1'。
示例 3:輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位爲 '1'。
字符串匹配
思路
首先將輸入轉換爲2進制字符串;
再返回字符串中1出現的次數。
代碼
class Solution:
def hammingWeight(self, n: int) -> int:
string = bin(n) # 轉換爲字符串
num = 0
index = string.find('1') # 統計次數
while string.find('1')>=0:
string = string[0:index]+string[index+1:]
index = string.find('1')
num = num + 1
return num
或者更簡單的代碼:
class Solution:
def hammingWeight(self, n: int) -> int:
return bin(n).count('1')
位運算
思路
根據 與運算 定義,設輸入整數爲n ,&爲按位與運算,則有:
若n&1==0,則n二進制表示的·最後一位爲0;
若n&1==1,則n二進制表示的最後一位爲1.
因此,只要依次執行:
判斷n二進制最右邊是否爲1;
將n的二進制位左移一位即可。這可以通過int(n/2),即n//2實現。
代碼
class Solution:
def hammingWeight(self, n: int) -> int:
res = 0
while n:
res = res + (n&1) # 判斷是否爲1
n = n//2 # 左移1位
return res