问题:
 
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
 
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
 
示例 1:
 
输入:4
输出:[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],
 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
 
注意:
 
皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。 
 
Solution:
 
def solveNQueens(n
):
    """
    :type n: int
    :rtype: List[List[str]]
    """
    def generateBoard():
        board 
= list()
        for i 
in range(n
):
            row
[queens
[i
]] = "Q"
            board
.append
("".join
(row
))
            row
[queens
[i
]] = "."
        return board
    
def backtrack(row
: int):
        if row 
== n
:
            board 
= generateBoard
()
            solutions
.append
(board
)
        else:
            for i 
in range(n
):
                if i 
in columns 
or row 
- i 
in diagonal1 
or row 
+ i 
in diagonal2
:
                    continue
                queens
[row
] = i
                columns
.add
(i
)
                diagonal1
.add
(row 
- i
)
                diagonal2
.add
(row 
+ i
)
                backtrack
(row 
+ 1)
                columns
.remove
(i
)
                diagonal1
.remove
(row 
- i
)
                diagonal2
.remove
(row 
+ i
)
    solutions 
= list()
    queens 
= [-1] * n
    columns 
= set()
    diagonal1 
= set()
    diagonal2 
= set()
    row 
= ["."] * n
    backtrack
(0)
    return solutions
 
 
来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/n-queens/