123456789101112131415161718 |
- func countArrangement(N int) (cnt int) {
- dfs(N, 1, 0, &cnt)
- return cnt
- }
- func dfs(N int, i int, used int, cnt *int) {
- if N < i {
- (*cnt)++
- return
- }
- for a := 1; a <= N; a++ {
- if mask := 1 << uint(a); used&mask == 0 && (a%i == 0 || i%a == 0) {
- used |= mask
- dfs(N, i+1, used, cnt)
- used ^= mask // Backtracking
- }
- }
- }
|