剑指Offer面试题10:二进制中1的个数(js实现)
题目描述:请实现一个函数,输入一个整数,输出该二进制表示中1的个数。
可能引起死循环的解法
function NumberOf1(num) {
var count = 0;
while(num) {
if(num & 1) {
count++;
}
//不能换成除以二,因为除法的效率比移位运算低得多
num = num >> 1;
}
return count;
}
常规解法
//为了防止输入的数为负数而出现死循环
//不再像之前一样右移输出的数
//而是左移用来做与运算的1
function NumberOf1(num) {
var count = 0,
flag = 1;
while(flag) {
if(num & flag) {
count ++;
}
flag = flag << 1;
}
return count;
}
能给面试官带来惊喜的解法
//修改后使得循环的次数等于1的个数
function NumberOf1(num) {
var count = 0;
while(num) {
count++;
num = (num-1) & num;
}
return count;
}