1 常规解法
首先将n和flag=1进行与运算 如果n最低位为1,则count++
然后flag右移一位再和n的次低位进行与运算,如果次低位是1 则count++
重复此过程直到flag移动到最高位。
public int NumberOf1(int n) {
int flag=1;
int count=0;
for(int i=0;i<32;i++){
if((n&flag)!=0){
count++;
}
flag=flag<<1;
}
return count;
}
or
将n变为二进制 然后循环判断每一位是否为1;
public int NumberOf1(int n) {
String str=Integer.toBinaryString(n);
int count =0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='1'){
count++;
}
}
return count;
}
2.特殊解法
当一个数减去1 那个这个数最右边的1之后的0将会变成1,最右边的1左边不变,然后这个数和这个数-1进行与运算,那么这个数最右边的1将会0 循环此过程 直到这个数全部变为0;
ex: 10的二进制是 1010 10-1的二进制是1001 相与结果为1000 10这个数最右边的1变为o 以此类推
最终10会变为0
public int NumberOf1(int n) {
int count=0;
while(n!=0){
n=n&(n-1);
count++;
}
return count;
}
网友评论