假设你有 N 个从 1 到 N 的整数。我们将一个美丽的排列定义为:如果一个数组由这给出的 N个整数构成,且满足下列任意一个条件对此数组中的第i个位置(1 <= i <= N)的要求,则这个数组为美丽的排列:
第 i 个
位置的元素可以被 i 整除。- i 可以被第 i 个元素整除。
现在给出 N,你可以构造出多少美丽的排列?
N 是一个正整数并且不会超过 15
。
您在真实的面试中是否遇到过这个题? 是
题目纠错
样例
样例1
输入: 2
输出: 2
解释:
第一个美丽的排列是[1, 2]:
第 1 个位置(i = 1)的数字为 1,1 可以被i(i = 1)整除。
第 2 个位置(i = 2)的数字为 2,2 可以被i(i = 2)整除。
第一个美丽的排列是[2, 1]:
第 1 个位置(i = 2)的数字为 2,2 可以被i(i = 1)整除。
第 2 个位置(i = 2)的数字为 1,i(i = 2)可以被 1 整除。
样例2
输入:3
输出:3
class Solution:
"""
@param N: The number of integers
@return: The number of beautiful arrangements you can construct
"""
N = 0
def t(self, deep, s):
if deep > self.N:
return 1
total = 0
for i in s:
if i % deep == 0 or deep % i == 0:
s.remove(i)
total += self.t(deep + 1, s)
s.add(i)
return total
def countArrangement(self, N):
s = set(range(1, N + 1))
self.N = N
return self.t(1, s)