LeetCode

52. N皇后 II

返回n皇后不同的解决方案的数量。不需要返回真正的解,更简单一些。

  1. int solutionCount = 0;
  2. int n;
  3. int[] columns;
  4. int[] diagonals1;
  5. int[] diagonals2;
  6. public int totalNQueens(int n) {
  7. this.n = n;
  8. columns = new int[n];
  9. //i+j
  10. diagonals1 = new int[2*n-1];
  11. //j-i
  12. diagonals2 = new int[2*n-1];
  13. backtrack(0);
  14. return solutionCount;
  15. }
  16. private void backtrack(int r) {
  17. if (r == n) {
  18. solutionCount++;
  19. return ;
  20. }
  21. for (int c = 0; c < n; c++) {
  22. if (!legal(r, c)) continue;
  23. place(r, c, 1);
  24. backtrack(r + 1);
  25. place(r, c, 0);
  26. }
  27. }
  28. private boolean legal(int r, int c) {
  29. return columns[c] == 0 && diagonals1[r + c] == 0 && diagonals2[c - r + n - 1] == 0;
  30. }
  31. private void place(int r, int c, int target) {
  32. columns[c] = target;
  33. diagonals1[r + c] = target;
  34. diagonals2[c - r + n - 1] = target;
  35. }