Skip to content
On this page

526. 优美的排列

原题链接:LeetCode 526. 优美的排列

题目描述

假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列

- `perm[i]` 能够被 `i` 整除

- `i` 能够被 `perm[i]` 整除

给你一个整数 n ,返回可以构造的 **优美排列 **的 数量

示例 1:

**输入:**n = 2 **输出:**2 解释: 第 1 个优美的排列是 [1,2]: - perm[1] = 1 能被 i = 1 整除 - perm[2] = 2 能被 i = 2 整除 第 2 个优美的排列是 [2,1]: - perm[1] = 2 能被 i = 1 整除 - i = 2 能被 perm[2] = 1 整除

示例 2:

**输入:**n = 1 **输出:**1

提示:

- `1 <= n <= 15`

难度: Medium


题解代码

javascript
/**
 * @param {number} n
 * @return {number}
 */
let count = 0
var countArrangement = function(n) {
  const used = Array(n).fill(false)
  count = 0
  backTrack(n, [], used)
  return count
};
function backTrack (n, path, used) {
  if (path.length === n) {
    return count++
  }
  for (let i = 1; i <= n; i++) {
    if (!isBeatiful(i, path.length + 1)) continue
    if (!used[i - 1]){
      path.push(i)
      used[i - 1] = true
      backTrack(n, path, used)
      used[i - 1] = false
      path.pop()
    }
  }
}
function isBeatiful (val, idx) {
  return parseInt(val / idx) === parseFloat(val / idx) ||
  parseInt(idx / val) === parseFloat(idx / val) 
}

技术文档集合