The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."]]
这题的解法和前面一题N queen II 一样,规则是两个queen不能再同一个行,列或者diagnal 所以每个循环里面有 board[i]!=j abs(k-i)!=abs[board[i]-j]
其他的是常规的dfs解法
代码如下:
class Solution: # @return a list of lists of string def solveNQueens(self, n): def check(k,j,board): for i in range(k): if board[i]==j or abs(k-i)==abs(board[i]-j): return False return True def dfs(depth,board,valuelist,solution): #for i in range(len(board)): if depth==len(board): solution.append(valuelist) for row in range(len(board)): if check(depth,row,board): s='.'*len(board) board[depth]=row dfs(depth+1,board,valuelist+[s[:row]+'Q'+s[row+1:]],solution) board=[-1 for i in range(n)] solution=[] dfs(0,board,[],solution) return solution