leetcode:二進制中1的個數

題目來源:力扣

題目描述:

請實現一個函數,輸入一個整數,輸出該數二進制表示中 1 的個數。例如,把 9 表示成二進制是 1001,有 2 位是 1。因此,如果輸入 9,則該函數輸出 2。
============================================================
示例 1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位爲 ‘1’。
==============================================================
you need to treat n as an unsigned value

審題:

對於該問題, 我們可以對整數逐位移位, 判斷每一位是否爲1, 統計爲1的位數.由於題目要求將整數n看作無符號整數, 因此我們在移位時需要使用無符號的移位方法.

public class Solution {
    public int hammingWeight(int n) {
        int res = 0;
        while(n != 0) {
            res += n & 1;
            n >>>= 1;
        }
        return res;
    }
}

另一個更巧妙的方法是將n與n-1進行與運算, 比較n與n-1的二進制位可以發現, n最右側的1對應n-1爲0, 而往左的各位則相同, 因此將n與n-1進行或運算 可以將最右側的1變爲0;

public class Solution {
    public int hammingWeight(int n) {
        int res = 0;
        while(n != 0) {
            res++;
            n &= n - 1;
        }
        return res;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章