0
点赞
收藏
分享

微信扫一扫

LeetCode 191. 位1的个数


思路

题目地址:https://leetcode-cn.com/problems/number-of-1-bits/

题目中说到给的是无符号整数(无符号数只能表示非负数,即0和正数),所以我们不用考虑为负数的情况

思路1:不断&1,直到输入的数变成0

思路2:巧用n&(n-1),效率更高

LeetCode 191. 位1的个数_无符号整数


可以看到n&(n-1)会把n的二进制中的最左边的1去掉,因此不断进行n&(n-1)即可,循环几次,则有几个1

代码

代码1:(超时,证明效率不高,运行时间太长)

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

代码2:(测试通过)

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


举报

相关推荐

0 条评论