DFS

LeetCode 526 Beautiful Arrangement (Python)

Posted by 小明MaxMing on January 3, 2020

题目

Suppose you have n integers from 1 to n. We define a beautiful arrangement as an array that is constructed by these n numbers successfully if one of the following is true for the ith position (1 <= i <= n) in this array:

  • The number at the ith position is divisible by i.
  • i is divisible by the number at the ith position. Given an integer n, return the number of the beautiful arrangements that you can construct.

解题思路

递归求出所有可能的排列

代码

class Solution:
    def countArrangement(self, n: int) -> int:
        def dfs(num, now):
            if now == 0:
                res[0] += 1
                return
            for i in range(now, 0, -1):
                num[i], num[now] = num[now], num[i]
                if num[now] % now == 0 or now % num[now] == 0:
                    dfs(num, now - 1)
                num[now], num[i] = num[i], num[now]

        res = [0]
        dfs([i for i in range(n + 1)], n)
        return res[0]

视频讲解 YouTube<--欢迎点击订阅

视频讲解 bilibili<--欢迎点击订阅