「leetcode」191. 位1的個數

原題

編寫一個函數,輸入是一個無符號整數,返回其二進制表達式中數字位數爲 ‘1’ 的個數(也被稱爲漢明重量)。函數

示例 1:spa

輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位爲 '1'複製代碼

示例 2:code

輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位爲 '1'複製代碼

示例 3:string

輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位爲 '1'複製代碼

思路

解答這道題目,咱們須要知道,按位與的取值規則,1 & 1 等於 1; 1 & 0 等於 0;0 & 1 等於0;0 & 0等於0。it

舉一個例子🌰io

// 結果等於1
0b11111111111111111111111111111101 & 
0b00000000000000000000000000000001
複製代碼

一個數,與1進行按位與操做。若是結果等於1,說明操做數的第一位等於1。這時,咱們計數器自增一。function

而後咱們將操做數右移一位,而後再與1進行按位與操做,判斷結果是否等於1。class

// 0b11111111111111111111111111111101 無符號右移一位
0b01111111111111111111111111111110

// 結果等於0
0b01111111111111111111111111111110 & 
0b00000000000000000000000000000001
複製代碼

……………………,依次類推,就可知,二進制中有多個1了。二進制

代碼

/** * @param {number} n - a positive integer * @return {number} */
var hammingWeight = function(n) {
    let num = 0
    while (n) {
        if (n & 1 === 1) {
            num += 1
        }
        n = n >>> 1
    }
    return num
};
複製代碼
相關文章
相關標籤/搜索