题目:
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
解题思路:
和Leetcode 51. N-Queens N皇后一样,都是用回溯法解决,相较于上一题的输出棋盘,这题输出合法棋盘总和相对更简单一点。
空间复杂度O(n)。
代码实现:
class Solution { public int totalNQueens(int n) { int res = 0; int scale = 0, maxScale = n; int[] line = new int[maxScale]; Arrays.fill(line, -1); while (scale >= 0) { if (scale == maxScale) { res ++; scale --; } line[scale] ++; if (check(line, scale)) { scale ++; } else { if (line[scale] >= n) { line[scale] = -1; scale --; } } } return res; } private boolean check(int[] line, int scale) { int k = line[scale]; if (k >= line.length) return false; if (scale == 0) return true; for (int i = 0; i < scale; i ++) { if (k == line[i] || Math.abs(k - line[i]) == Math.abs(scale - i)) return false; } return true; } }