回溯
模板一
private void helper(..., int[] used) {
// 1. 判断全部成功, return
// 2. for 0 --> N
// 3. 单个成功: used[i] = true
// helper(..., used);
// 4. 单个回退: used[i] = false
}
private void helper(int N, int pos, int[] used) {
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;
helper(N, pos + 1, used);
used[i] = 0;
}
}
}