11、二进制中1的个数
题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
使用库函数转换成字符数组,遍历计数。
public class Solution {
public int NumberOf1(int n) {
int count=0;
char[] ch = Integer.toBinaryString(n).toCharArray();
for(int i=0;i<ch.length;i++){
if(ch[i]=='1'){
count++;
}
}
return count;
}
}
简洁思路:
对于一个非零的数二进制表示中至少会有一个1,对n和n-1按位与是因为,假设n的二进制为110110,那么n-1的二进制为110101,按位与的结果为110100,把最右侧的1消除掉了。
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
count++;
n = n & (n-1);
}
return count;
}
}
来源:CSDN
作者:llluluyi
链接:https://blog.csdn.net/llluluyi/article/details/104770243