思路:
- 对一个整数 n,比如 10,它的二进制是 1010
- 将 10 减一变为 9,9 的二进制是 1001
- 比较 10 和 9 的二进制数,对 10 减一操作就等于将 10 的二进制的最低位上的 1 以及后面的位取反,前面的数不变。
总结:
把一个整数减去 1,再和原整数做与运算,会把该整数最右边 1 一个 1 变成 0。那么一个整数的二进制表示中有多少个 1,就可以进行多少次这样的操作。从而可以减少比较的次数
- public class Solution {
- public int hammingWeight(int n) {
- int count = 0;
- while(n != 0){
- n = n & (n-1);
- count++;
- }
- return count;
- }
- }