题目概述(中等难度)
题目链接:
点我进入leetcode
思路与代码
思路展现
这道题目思路依然取自我们K神大佬,这里就不再做过多的赘述了
关于逻辑右移,左移,右移还不清楚的小伙伴可以来看这篇题解:
点我进入题解
或者来看我的这篇博客:
点我进入博客
二进制减法不会的同学可以来看这篇博客:
点我进入博客
代码示例
代码1:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n != 0) {
//这里直接+=是非常便捷的写法,无需使用if语句判断n&1是否等于1或者0
res += n&1;
//逻辑右移
n >>>= 1;
}
return res;
}
}
代码2:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int res = 0;
while(n != 0) {
//先把1的个数统计后,再去做与运算.
res++;
n &= (n-1);
}
return res;
}
}