LeetCode 52.N-Queens II
LeetCode 52.N-Queens II ()
题目
链接
https://leetcode-cn.com/problems/n-queens-ii/
问题描述
n皇后问题研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n ,返回 n 皇后不同的解决方案的数量。
示例
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
提示
https://leetcode-cn.com/problems/n-queens-ii/
思路
回溯法,这个不需要输出实际的结果即可。
复杂度分析
时间复杂度 O(n!)
空间复杂度 O(n)
代码
Java
HashSet<String> ans = new HashSet<>();
int[] queen;
public int totalNQueens(int n) {
queen = new int[n];
place(0, n);
return ans.size();
}
public String getans(int n) {
StringBuffer s = new StringBuffer();
for (int i = 0; i < n; i++) {
s.append(queen[i]);
}
return s.toString();
}
public void place(int t, int n) {
if (t == n) {
ans.add(getans(n));
return;
}
for (int i = 0; i < n; i++) {
if (check(t, i, n)) {
queen[t] = i;
place(t + 1, n);
queen[t] = 0;
}
}
}
public boolean check(int t, int x, int n) {
for (int i = 0; i < t; i++) {
if (queen[i] == x || queen[i] == x - t + i || queen[i] == x + t - i) {
return false;
}
}
return true;
}