输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
错误解法:
public class Solution {
public int NumberOf1(int n) {
int num=0;
while(n!=0){
if((n&1)==1)num++;
n=n>>1;
}
return num;
}
}
若输入的数字为负数,因为为补码表示方式,所以高位一直是1,所以会陷入死循环。
方法一:从高位开始计算
public class Solution {
public int NumberOf1(int n) {
int num=0;
int flag=1;
while(flag!=0){
if((n&flag)!=0)num++;
flag=flag<<1;
}
return num;
}
}
方法二:用当前数字-1与当前数字作与操作
public class Solution {
public int NumberOf1(int n) {
int num=0;
while(n!=0){
num++;
n=(n-1)&n;
}
return num;
}
}
方法三:转换成字符串String
public class Solution {
public int NumberOf1(int n) {
return Integer.toBinaryString(n).replaceAll("0","").length();
}
}