Skip to content

526. Beautiful Arrangement

Difficulty: Medium

LeetCode Problem View on GitHub


526. Beautiful Arrangement

Medium


Suppose you have n integers labeled 1 through n. A permutation of those n integers perm (1-indexed) is considered a beautiful arrangement if for every i (1 <= i <= n), either of the following is true:

  • perm[i] is divisible by i.
  • i is divisible by perm[i].

Given an integer n, return the number of the beautiful arrangements that you can construct.

 

Example 1:

Input: n = 2
Output: 2
Explanation: 
The first beautiful arrangement is [1,2]:
    - perm[1] = 1 is divisible by i = 1
    - perm[2] = 2 is divisible by i = 2
The second beautiful arrangement is [2,1]:
    - perm[1] = 2 is divisible by i = 1
    - i = 2 is divisible by perm[2] = 1

Example 2:

Input: n = 1
Output: 1

 

Constraints:

  • 1 <= n <= 15

Solution

class Solution {
    private int ans;
    public int countArrangement(int n) {
        ans = 0;
        int vis[] = new int[n + 1];
        solve(vis, n, 1);
        return ans;
    }
    private void solve(int vis[], int n, int curr_num) {
        if (curr_num == n + 1) {
            ans++;
            return;
        }
        for (int i = 1; i <= n; i++) {
            if (vis[i] == 0) {
                if (curr_num % i == 0 || i % curr_num == 0) {
                    vis[i] = 1;
                    solve(vis, n, curr_num + 1);
                    vis[i] = 0;
                }
            }
        }
    }
}

Complexity Analysis

  • Time Complexity: O(?)
  • Space Complexity: O(?)

Approach

Detailed explanation of the approach will be added here