package com.fishercoder.solutions;

/**
 * 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.
 Now given N, how many beautiful arrangements can you construct?

 Example 1:
 Input: 2
 Output: 2

 Explanation:

 The first beautiful arrangement is [1, 2]:

 Number at the 1st position (i=1) is 1, and 1 is divisible by i (i=1).

 Number at the 2nd position (i=2) is 2, and 2 is divisible by i (i=2).

 The second beautiful arrangement is [2, 1]:

 Number at the 1st position (i=1) is 2, and 2 is divisible by i (i=1).

 Number at the 2nd position (i=2) is 1, and i (i=2) is divisible by 1.

 Note:
 N is a positive integer and will not exceed 15.
 */
public class _526 {
    //A good post to look at: https://discuss.leetcode.com/topic/79916/java-solution-backtracking and it's generic template afterwards for backtracking problems

    int count = 0;

    public int countArrangement(int N) {
        backtracking(N, new int[N + 1], 1);
        return count;
    }

    private void backtracking(int N, int[] used, int pos) {
        if (pos > N) {
            count++;
            return;
        }
        for (int i = 1; i <= N; i++) {
            if (used[i] == 0 && (i % pos == 0 || pos % i == 0)) {
                used[i] = 1;
                backtracking(N, used, pos + 1);
                used[i] = 0;
            }
        }
    }

}

@@ -33,16 +33,46 @@
 s;%0A%0A/**%0A
+ * 526. Beautiful Arrangement%0A
  * Suppo
@@ -106,16 +106,19 @@
  1 to N.
+%0A *
  We defi
@@ -972,14 +972,12 @@
 6 %7B%0A
-    //
+%09/**
 A go
@@ -1067,17 +1067,26 @@
 king
+%0A%09 *
  and 
-it's
+there's a
  gen
@@ -1135,22 +1135,21 @@
 problems
-%0A%0A    
+*/%0A%0A%09
 int coun
@@ -1156,20 +1156,17 @@
 t = 0;%0A%0A
-    
+%09
 public i
@@ -1194,24 +1194,18 @@
 nt N) %7B%0A
-        
+%09%09
 backtrac
@@ -1232,24 +1232,18 @@
 1%5D, 1);%0A
-        
+%09%09
 return c
@@ -1252,19 +1252,13 @@
 nt;%0A
-    %7D%0A%0A    
+%09%7D%0A%0A%09
 priv
@@ -1309,24 +1309,18 @@
  pos) %7B%0A
-        
+%09%09
 if (pos 
@@ -1330,67 +1330,37 @@
 ) %7B%0A
-            count++;%0A            return;%0A        %7D%0A        
+%09%09%09count++;%0A%09%09%09return;%0A%09%09%7D%0A%09%09
 for 
@@ -1386,28 +1386,19 @@
  i++) %7B%0A
-            
+%09%09%09
 if (used
@@ -1447,142 +1447,88 @@
 ) %7B%0A
-                used%5Bi%5D = 1;%0A                backtracking(N, used, pos + 1);%0A                used%5Bi%5D = 0;%0A            %7D%0A        %7D%0A    
+%09%09%09%09used%5Bi%5D = 1;%0A%09%09%09%09backtracking(N, used, pos + 1);%0A%09%09%09%09used%5Bi%5D = 0;%0A%09%09%09%7D%0A%09%09%7D%0A%09
 %7D%0A%0A%7D

refactor for format