问题:
输入一个整数,输出该数二进制表示中 1 的个数。
JavaScript 代码:
/** * @param {number} n - a positive integer(这里也说了输入是正整数。。。) * @return {number} */ var hammingWeight = function(n) { let res = 0; let x = n.toString(2); x = x.split(''); for(let i=0;i<x.length;i++){ if(x[i]=='1'){ res++; } } return res; };
这个代码有问题,当输入的整数为负数时,输出结果是错的。。
适用于正负整数的方法还是基于位运算:
首先把 n 与 1 做与运算,判断 n 的最低位是不是 1。然后,把 1 左移一位,再和 n 做与运算,就能判断 n 的次低位是不是 1 ......这样不断左移,就能判断 n 的其中一位是不是 1.
function NumberOf1(n) { // write code here let count = 0; let flag = 1; while(flag){ if(n&flag){ count++; } flag=flag<<1; } return count; }