JavaScript 中漂亮的数字排列
美丽的安排:
假设我们有num个整数,从1到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