第一个方法:以前不知道还有bitCount()方法,虽然不咋快,但是见了就整理进来吧
public class Solution {
public int NumberOf1(int n) {
return Integer.bitCount(n);
}
}
第二个方法:优点,很好理解。缺点,有的循环可能是不必要的
思路,每次将n较上一次右移一位,将最末位和1与,如果最末位是1,那么与的结果也是1,否则就是0。
public class Solution {
public int NumberOf1(int n) {
int count=0;
for(int i=0;i<32;i++){
if((n>>i&1)==1) count++;
}
return count;
}
}
第三种方法:n&(n-1)就可以拿来算哦
如果二进制数的末位是1,减1,末位就会变成0;如果二进制数末位不是0,减1之后,1之后到末位之间的0都会变成1。
每次做n&(n-1)后,都会把n中最末位的1变成0,那么n有多少个1就能做n&(n-1)几次。
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
n=n&(n-1);
count++;
}
return count;
}
}