未给出预期输出的计数位

Counting Bits giving not the expected output

试图解决Counting Bits using JavaScript,基本上finding the number of set bits for all numbers from 0 to N and push them in an array and return as answer

这是解释

            Input: n = 5
            Output: [0,1,1,2,1,2]
            Explanation:
            0 --> 0
            1 --> 1
            2 --> 10
            3 --> 11
            4 --> 100
            5 --> 101

这是Java脚本

中的解决方案
                const countBits = function (nums){

                   let mem = [];
                   mem[0] = 0;
                   
                   
                   for (let i=0;i<=nums;i++)
                   
                     mem[i] = mem[i/2] + i%2;
                     
                     return mem;


                }

我看到输出为

            PS C:\VSB-PRO> node Fibo.js
            [ 0, NaN, NaN, NaN, NaN ]

这里是尝试转换的参考代码,之前写在Java

            class Solution {
            public:
                vector<int> countBits(int num) {
                    //mem[i] = No of 1s from 0 to number i
                    vector<int> mem(num+1);
                    mem[0] = 0;
                    
                    for(int i=1;i<=num;++i)
                        mem[i] = mem[i/2] + i%2;
                    
                    return mem;
                }
            };

非常感谢您的帮助

此致,

卡罗琳

将正数转换为 Javascript 字符串对象对您有用

console.log(Number(256).toString(2)); // 100000000

如果您的数组同时包含正数和负数,那么您可以再次使用带有 toString 方法的“unsigned right shift”运算符。

console.log((-256 >>> 0).toString(2)); // 11111111111111111111111100000000

问题是,在Java中,当操作数是整数时,/表示整数除法,但在Java脚本中,除法将是浮点数除法,因此1 /2 == 0.5,然后 mem[0.5] 将是一个未定义的值。

使用位移运算符来获得相同的行为:

const countBits = function(nums) {
  let mem = [0];
  for (let i = 0; i <= nums; i++)
    mem[i] = mem[i >> 1] + i % 2;
  return mem;
}

console.log(countBits(5));