15.二进制中1的个数
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入
9,则该函数输出 2。示例 1:
输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:
输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
示例 3:
输入:11111111111111111111111111111101 输出:31 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
1.逐位判断
th:使用位运算符将数字每次右移一次 & 1如果为1 就result++
time:O(n)
space:O(1)
public int hammingWeight(int n) {
int result = 0;
while(n!=0){
result+= n & 1;
n >>>= 1;
}
return result;
}
2.巧用n &=(n-1)
th:假设 n = 3 n= 0101 n-1 = 0100 n&=(n-1) n = 0100 消去一个1 result++ 再次循环
n -1 = 0000 n&=(n-1) n=0 退出循环 result = 2
time:O(n)
space:O(1)
public int hammingWeight(int n) {
//1.巧用 n&=(n-1)
int result = 0;
while(n!=0){
result++;
n &= (n-1);
}
return result;
}