面試題15 二進制中1的個數(Python3)

 

 

 

請實現一個函數,輸入一個整數,輸出該數二進制表示中 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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章