建立一个数组,[1,3,2]这里指第一行第一列,第二行第三列,第三行第二列放置皇后。由于行肯定是不同的,所以只需判断列和斜方向( if board[i]==num or abs(num-board[i])==abs(i-row):)
用dfs遍历所有情况,这里注意要用列表切片进行传递(否则tmp里面会无限增加行)
class Solution:
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
res=[]
def check(row,num):
for i in range(row):
if board[i]==num or abs(num-board[i])==abs(i-row):
return False
return True
def generate(row,tmp):
if row==n:
res.append(tmp)
return
for i in range(n):
if check(row,i):
board[row]=i
generate(row+1,tmp+['.'*i+'Q'+'.'*(n-1-i)])
board=[-1]*n
generate(0,[])
return res