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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP