This commit is contained in:
youngyangyang04
2021-10-25 12:48:55 +08:00
parent 33768a0ffb
commit 104ba7c7a8
19 changed files with 804 additions and 197 deletions

View File

@@ -7,46 +7,28 @@
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!</strong></p>
## 第51题. N皇后
# 第51题. N皇后
[力扣题目链接](https://leetcode-cn.com/problems/n-queens/)
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法
![51n皇后](https://img-blog.csdnimg.cn/20200821152118456.png)
给你一个整数 n 返回所有不同的 n 皇后问题 的解决方案
给定一个整数 n返回所有不同的 n 皇后问题的解决方案
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例 1
示例:
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211020232201.png)
输入: 4
* 输入n = 4
* 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
* 解释如上图所示4 皇后问题存在两个不同的解法。
输出:
解法 1
[
[".Q..",
"...Q",
"Q...",
"..Q."],
解法 2
["..Q.",
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
提示:
> 皇后,是国际象棋中的棋子,意味着国王的妻子。皇后只做一件事,那就是“吃子”。当她遇见可以吃的棋子时,就迅速冲上去吃掉棋子。当然,她横、竖、斜都可走一到七步,可进可退。(引用自 百度百科 - 皇后
示例 2
* 输入n = 1
* 输出:[["Q"]]
## 思路
@@ -71,7 +53,7 @@ n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并
那么我们用皇后们的约束条件,来回溯搜索这颗树,**只要搜索到了树的叶子节点,说明就找到了皇后们的合理位置了**。
## 回溯三部曲
### 回溯三部曲
按照我总结的如下回溯模板,我们来依次分析:
@@ -178,8 +160,6 @@ bool isValid(int row, int col, vector<string>& chessboard, int n) {
那么按照这个模板不难写出如下C++代码:
## C++代码
```CPP
class Solution {
private:
@@ -247,7 +227,7 @@ public:
## 其他语言补充
Python
### Python
```python
class Solution:
@@ -296,7 +276,7 @@ class Solution:
return res
```
Java
### Java
```java
class Solution {
@@ -366,7 +346,7 @@ class Solution {
```
Go
### Go
```Go
import "strings"
var res [][]string
@@ -433,8 +413,7 @@ func solveNQueens(n int) [][]string {
return res
}
```
Javascript:
### Javascript
```Javascript
var solveNQueens = function(n) {
function isValid(row, col, chessBoard, n) {