IT虾米网

优美的排列

xmjava 2022年05月03日 程序员 267 0

假设有从 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

示例代码:【回溯】

class Solution(object): 
    def __init__(self): 
        self.res = 0 
 
    def countArrangement(self, n): 
        self.dfs(n, [], 1) 
        return self.res 
 
    def dfs(self, n, path, index): 
        if len(path) == n: 
            print(path) 
            self.res += 1 
        for i in range(1, n + 1): 
            if i in path: 
                continue 
            if i % index == 0 or index % i == 0: 
                path.append(i) 
                self.dfs(n, path, index + 1) 
                path.pop() 
 
 
obj = Solution() 
ans = obj.countArrangement(4) 
print(ans) 

运行结果:


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

字母大小写全排列