Back to all solutions
#526 - Beautiful Arrangement
Problem Description
Suppose you have n integers labeled 1 through n. A permutation of those n integers perm (1-indexed) is considered a beautiful arrangement if for every i (1 <= i <= n), either of the following is true:
- perm[i] is divisible by i.
- i is divisible by perm[i].
Given an integer n, return the number of the beautiful arrangements that you can construct.
Solution
/**
* @param {number} n
* @return {number}
*/
var countArrangement = function(n) {
let count = 0;
backtrack(1, 0);
return count;
function backtrack(offset, used) {
if (offset > n) {
count++;
return;
}
for (let i = 1; i <= n; i++) {
if (!(used & (1 << i)) && (i % offset === 0 || offset % i === 0)) {
backtrack(offset + 1, used | (1 << i));
}
}
}
};