10.二进制中1的个数 --剑指Offer(Java版)
github输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。Java中提供类库public int NumberOf1(int n) {// 库函数return Integer.bitCount(n);}当然,我不推荐在面试的时候用这个,因为底层的bitCount()我愁了好久也没看懂啥意思,问到就凉了./**...
·
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
Java中提供类库
public int NumberOf1(int n) {
// 库函数
return Integer.bitCount(n);
}
当然,我不推荐在面试的时候用这个,因为底层的bitCount()我愁了好久也没看懂啥意思,问到就凉了.
/**
* 二进制中1的个数
* <p>
* 输入一个整数,输出该数二进制表示中1的个数。
* 其中负数用补码表示。
*/
public class _010_NumberOf1 {
public int NumberOf1(int n) {
// 库函数
// return Integer.bitCount(n);
// 自己手写一个简单的计数器
// return count1ByBin(n);
// 作者推荐算法.
// 循环次数只和二进制中的 1 的个数有关.,明显降低循环次数.
// 循环时间与二进制中1的个数正相关。
int count = 0;
while (n != 0) {
++count;
n = (n - 1) & n; // 扔掉最后一位1
}
return count;
}
private int count1ByBin(int n) {
int count = 0;
int flag = 1;
// 和 int 的 字节有关,可以理解为:32次循环
while (flag != 0) {
if ((n & flag) != 0) {
count++;
}
flag = flag << 1;
}
return count;
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)