题目:
假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm(下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列 :
perm[i]能够被i整除i能够被perm[i]整除
给你一个整数 n ,返回可以构造的 优美排列 的 数量 。
算法:
func countArrangement(n int) int {
ans := 0
permFlag := make([]int, n + 1)
// 安排perm的第index的数
result := make([]int, 1)
var backtracking func(index int)
backtracking = func(index int) {
if index == n + 1 {
ans ++
return
}
// i是放在perm[i]的值
for i := 1; i <= n; i ++ {
if permFlag[i] == 0 && ((index % i == 0) || (i % index == 0)) {
permFlag[i] = 1
result = append(result, i)
backtracking(index + 1)
result = result[:len(result) - 1]
permFlag[i] = 0
}
}
}
backtracking(1)
return ans
}