Beautiful Arrangement:
Suppose we have num integers from 1 to num. We define a beautiful arrangement as an array that is constructed by these num numbers successfully if one of the following is true for the ith position (1 ≤ i ≤ N) in this array −
The number at the ith position is divisible by i.
i is divisible by the number at the ith position.
Problem
We are required to write a JavaScript function that takes in a number, num, and returns the count of beautiful arrangements we can construct for num.
For example, if the input to the function is −
const input = 2
Then the output should be −
const output = 2
Output Explanation
The first beautiful arrangement is [1,2]:
The second beautiful arrangement is [2,1]:
Example
The code for this will be −
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));
Code Explanation:
We define a result variable (ans) and then create a recursive function to navigate the multiple branching possibilities. This recursive function will only need two arguments: which number are we currently looking to place (curr) and which spots have already been visited (vis).
Output
And the output in the console will be −
8