在 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告