1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
private int count;

public int countArrangement(int n) {
backtrack(1, n, new boolean[n + 1]);
return count;
}

private void backtrack(int pos, int n, boolean[] visited) {
if (pos > n) {
count += 1;
return;
}
for (int i = 1; i <= n; ++i) {
if (!visited[i] && Math.max(i, pos) % Math.min(i, pos) == 0) {
visited[i] = true;
backtrack(pos + 1, n, visited);
visited[i] = false;
}
}
}
}

没想到是用backtrack, 直接暴力解.

时间复杂度: O(k) k是valid的permutation的个数.
空间复杂度: O(n) boolean array, 以及递归用的栈.