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