classSolution: defsolveNQueens(self, n: int) -> List[List[str]]: ans = [] self.dfs([], n, ans) return ans
defdfs(self, all_cols, n, ans): for c in self.find_candidates(all_cols, n): all_cols.append(c) iflen(all_cols) == n: ans.append(self.format_ans(all_cols))
self.dfs(all_cols, n, ans) all_cols.pop()
deffind_candidates(self, all_cols, n): all_valid = [] for i inrange(n): if self.isvalid(all_cols, i): all_valid.append(i) return all_valid
defisvalid(self, all_cols, col): row = len(all_cols) for r, c inenumerate(all_cols): if c == col orabs(row - r) == abs(col - c): returnFalse returnTrue
defformat_ans(self, ans): s = ['.'*i + 'Q' + '.'*(len(ans)-i-1) for i in ans] return s