[LeetCode] #191 位1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
使用Integer的API
class Solution { public int hammingWeight(int n) { return Integer.bitCount(n); } }
使用&按位计数
public class Solution { public int hammingWeight(int n) { int res = 0; for(int i = 0;i < 32;i++) if((n & 1<<i) != 0) res++; return res; } }
或者
class Solution { public int hammingWeight(int n) { int count = 0; for (int i = 0; i < 32; i++) { count += n & 1; n >>= 1; } return count; } }
n&(n-1) 其运算结果恰为把 n 的二进制位中的最低位的 1 变为 0 之后的结果
利用这个位运算的性质,运算次数就等于 n 的二进制位中 1 的个数
public class Solution { public int hammingWeight(int n) { int ret = 0; while (n != 0) { n &= n - 1; ret++; } return ret; } }
知识点:
Integer.bitCount() 把int类型转换成二进制,计算二进制中1的个数。
总结:无