我是靠谱客的博主 霸气天空,这篇文章主要介绍统计二进制数中1的个数方法(余数法,位移法,异或法),现在分享给大家,希望可以做个参考。

Leetcode 191

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数

在这里我会介绍好解法,供大家参考一下

除2取余数的方法

// 这种方法会出现 超出时间限制
public int hammingWeight(int n) {
int cnt = 0;
while (n !=0) {
cnt += n % 2; // 如果对2取余数,余数为1说明,最右侧是1,否则是0
n >>= 1; // 右移动一位
}
return cnt;
}

直接判断最低位的数是否为1

public int hammingWeight(int n) {
int cnt = 0;
while (n != 0) {
cnt += n&1;
n >>=1;
}
return cnt;
}

使用异或的方式,这是效率最高的一种方式(击败100%的用户)

public int hammingWeight(int n) {
int cnt = 0;
while(n != 0) {
int rightOne = n & (~n + 1);
cnt++;
n ^= rightOne;
}
return cnt;
}

最后

以上就是霸气天空最近收集整理的关于统计二进制数中1的个数方法(余数法,位移法,异或法)的全部内容,更多相关统计二进制数中1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(134)

评论列表共有 0 条评论

立即
投稿
返回
顶部