Beautiful Arrangement LeetCode solution in Java
1class Solution {2int N;3Integer[][] memo;45public int countArrangement(int n) {6this.N = n;7memo = new Integer[n + 1][1 << N];8return permute(1, 0);9}1011private int permute(int index, int mask) {12if (mask == (1 << N) - 1) return 1;13if (memo[index][mask] != null) return memo[index][mask];14int res = 0;15for (int i = 1; i <= N; i++) {16if ((mask & (1 << (i - 1))) == 0 && (index % i == 0 || i % index == 0)) {17mask |= (1 << (i - 1));18res += permute(index + 1, mask);19mask ^= (1 << (i - 1));20}21}22return memo[index][mask] = res;23}24}