在 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 ]

以上是 在 JavaScript 中以二进制表示的形式计算 1 的全部内容, 来源链接: utcz.com/z/311401.html

回到顶部