JavaScript 中的美麗排列


美麗排列

假設我們有從 1 到 num 的 num 個整數。我們定義一個**美麗排列**為一個由這些 num 個數字依次構成的陣列,如果陣列中第 i 個位置(1 ≤ i ≤ N)滿足以下條件之一:-

  • 第 i 個位置的數字可以被 i 整除。

  • i 可以被第 i 個位置的數字整除。

問題

我們需要編寫一個 JavaScript 函式,它接收一個數字 num 作為輸入,並返回我們可以為 num 構造的美麗排列的數量。

例如,如果函式的輸入為:

const input = 2

則輸出應為:

const output = 2

輸出解釋

第一個美麗排列是 [1,2]

第二個美麗排列是 [2,1]

示例

程式碼如下:

 線上演示

const num = 4;
const countArrangements = (num = 1) => {
   let ans = 0
   const recur = (curr, vis) => {
      if (curr === 1){
         ans++;
      }else{
         for (let i = num; i; i--) {
            let possible = (i % curr === 0 || curr % i === 0);
            let visited = vis & 1 << i;
            if (possible && !visited){
               recur(curr-1, vis | 1 << i);
            }
         }
      }
   };
   recur(num, 0);
   return ans;
};
console.log(countArrangements(num));

程式碼解釋

我們定義一個結果變數(**ans**),然後建立一個**遞迴函式**來遍歷多個分支可能性。這個遞迴函式只需要兩個引數:我們當前要放置哪個數字(curr)以及哪些位置已經被訪問過(vis)。

輸出

控制檯輸出將為:

8

更新於: 2021年3月3日

318 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.