这道题我认为关键是建立好行列之间的数组col
,表示第i
行第col[i]
列
i
从0
到n-1
开始遍历(已经保证了不同行),在每次遍历中判断每一列(相当于判断这一行中,皇后应该放在哪一列)
判断函数valid
的规则应该是:
- 不同列:
c
不等于col[r]
- 左上到右下的对角线:
r-c
的差值不相同 - 右上到左下的对角线:
r+c
的和值不相同
class Solution {public int ans = 0;private int[] col;public int totalNQueens(int n) {col = new int[n];dfs(0, n);return ans;}private boolean valid(int r, int c) {for (int R = 0; R < r; ++R) {int C = col[R];if (C == c || r + c == R + C || r - c == R - C) return false;}return true;}private void dfs(int r, int n) {if (r == n) {++ans;} else {for (int c = 0; c < n; ++c) {if (valid(r, c)) {col[r] = c;dfs(r + 1, n);}}}}
}