Study Plan - Programming Skills Day 2 Operator。
剛好跟今天的每日題呼應,真巧。

題目

輸入一個整數,求以二進位表示有多少個位元1。

解法

維護變數cnt,當n>0時將cnt加上n&1,並將n/2。最後cnt就是答案。

class Solution:
    def hammingWeight(self, n: int) -> int:
        cnt = 0
        while n:
            cnt += n & 1
            n >>= 1

        return cnt

2022-05-26更新,又是每日題。
這次比較懶,直接用python內建函數轉成字串,再判斷有多少個1。

class Solution:
    def hammingWeight(self, n: int) -> int:
        return bin(n).count('1')

仔細想想不對,這麼單純的題目應該不會多次出現在每日題。
逛逛討論區才知道有個特殊的運算:n&(n-)。
這個運算每次可以把最末端的1改成0,重複這個動作,直到n=0為止。

例如:

n = 101, (n-1) = 110
n&(n-1) = 100

class Solution:
    def hammingWeight(self, n: int) -> int:
        cnt=0
        while n:
            n&=(n-1)
            cnt+=1
            
        return cnt