在 JavaScript 中计算数字二进制表示中的 1 的个数


问题

我们需要编写一个 JavaScript 函数,该函数以一个整数 num 作为第一个也是唯一的参数。我们的函数应该为 0 到 num 之间(包括两者)的每个数字准备一个数组,对于每个数字,相应的元素应该是该数字二进制表示中包含的 1 的个数。

例如,如果函数的输入为:

const num = 4;

那么输出应该为:

const output = [0, 1, 1, 2, 1];

输出解释

因为 0 在其二进制形式中包含 0 个 1,1 包含 1 个,依此类推。

示例

这部分的代码将是:

const num = 4;
const mapBinary = (num = 0) => {
   if (num === 0){
      return [0];
   };
   const res = [0];
   for (let i = 1; i <= num; i++) {
      const n = i % 2 === 0 ? res[i/2] : res[Math.floor(i/2)] + 1;
      res.push(n);
   };
   return res;
};

代码解释

在计算位数时,我们可以记住一些事情,以便使事情对我们来说更容易。

  • numberOfBits(n) === numberOfBits(2*n),第二个结果比第一个结果多一个 0 位。

  • 如果 n 是偶数,则 n 的最后一位将为 0。

  • 如果 n 是奇数,则计算结果可以被认为是用 1 替换 (n-1)/2 的最后一位,所以我们得到方程 numberOfBits(n) === numberOfBits(Math.floor(n / 2)) + 1。

输出

控制台中的输出将为:

[ 0, 1, 1, 2, 1 ]

更新于: 2021年3月19日

376 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告