这样我们可以不断进行n = n & (n - 1)直到 n === 0 , 说明没有一个 1 了。 这个时候我们消除了多少1变成一个1都没有了, 就说明n有多少个1了。
关键点解析
n & (n - 1) 可以消除 n 最后的一个 1 的原理 简化操作
bit 运算
代码
语言支持:JS, C++,Python,Java
JavaScript Code:
/*
* @lc app=leetcode id=191 lang=javascript
*
*/
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function (n) {
let count = 0;
while (n !== 0) {
n = n & (n - 1);
count++;
}
return count;
};
C++ code:
class Solution {
public:
int hammingWeight(uint32_t v) {
auto count = 0;
while (v != 0) {
v &= (v - 1);
++count;
}
return count;
}
};
Python Code:
class Solution(object):
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
count = 0
while n:
n &= n - 1
count += 1
return count
Java Code:
public class Solution {
public int hammingWeight(int n) {
int count = 0;
for (int i = 0; i < 32; i++) {
if ((n & (1 << i)) != 0) {
count++;
}
}
return count;
}
}