mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Update 0051.N皇后.md
This commit is contained in:
@ -345,58 +345,6 @@ class Solution {
|
||||
}
|
||||
}
|
||||
```
|
||||
```java
|
||||
//该方法主要特点在于用一个一维数组暂存皇后的位置,数组下标代表行,数组下标的值代表列,并初始化一个长度为n-1,值全为'.'的模板字符串
|
||||
//在找到合法方案时,遍历数组,在模板字符串下标为数组值的位置插入Q
|
||||
class Solution {
|
||||
//结果
|
||||
List<List<String>> result = new ArrayList<>();
|
||||
//储存皇后的位置,下标为行,值为列
|
||||
int[] queenIndex;
|
||||
//棋盘中一行的字符串模板
|
||||
String template;
|
||||
int size;
|
||||
|
||||
public List<List<String>> solveNQueens(int n) {
|
||||
size = n;
|
||||
template = ".".repeat(n - 1);
|
||||
queenIndex = new int[n];
|
||||
deal(0);
|
||||
return result;
|
||||
}
|
||||
|
||||
void deal(int index) {
|
||||
//遍历当前行的所有位置(尝试在这行每个位置放置皇后)
|
||||
for (int i = 0; i < size; i++) {
|
||||
queenIndex[index] = i;
|
||||
//检查在当前位置放置皇后是否合法
|
||||
if (check(index, i)) {
|
||||
//如果当前的行是最后一行,就说明当前皇后的摆放已经是完整并且合法的,在结果集中加入当前的摆放方案
|
||||
if (index == size - 1) {
|
||||
List<String> tmp = new ArrayList<>(size);
|
||||
//遍历当前的皇后位置,在模板字符串对应的位置加入Q,再加入到结果集中
|
||||
for (Integer integer : queenIndex) {
|
||||
tmp.add(new StringBuilder(template).insert(integer, "Q").toString());
|
||||
}
|
||||
result.add(tmp);
|
||||
return;
|
||||
}
|
||||
//如果当前不是最后一行,还需要进入下一行
|
||||
deal(index + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean check(int rowIndex, int columnIndex) {
|
||||
for (int i = 0; i < rowIndex; i++) {
|
||||
if (queenIndex[i] == columnIndex || (Math.abs(queenIndex[i] - columnIndex) == Math.abs(i - rowIndex))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Python
|
||||
|
||||
|
Reference in New Issue
Block a user