526.beautiful-arrangement.go 336 B

123456789101112131415161718
  1. func countArrangement(N int) (cnt int) {
  2. dfs(N, 1, 0, &cnt)
  3. return cnt
  4. }
  5. func dfs(N int, i int, used int, cnt *int) {
  6. if N < i {
  7. (*cnt)++
  8. return
  9. }
  10. for a := 1; a <= N; a++ {
  11. if mask := 1 << uint(a); used&mask == 0 && (a%i == 0 || i%a == 0) {
  12. used |= mask
  13. dfs(N, i+1, used, cnt)
  14. used ^= mask // Backtracking
  15. }
  16. }
  17. }