面试150 N皇后Ⅱ
思路
与N皇后的思路类似,通过逐行放置皇后并递归探索所有合法方案。每次放置前,使用三个集合分别记录已被占用的列、主对角线(row - col)和副对角线(row + col),以实现有效剪枝,避免冲突。若成功在每一行都放置了皇后(即 row == n),则计数器加一。通过递归与撤销操作(回溯),枚举所有可能的合法布局,从而统计出所有可行解的总数。
class Solution:def totalNQueens(self, n: int) -> int:self.count=0def backtracking(row,cols,dig1,dig2):if row==n:self.count+=1for col in range(n):if col in cols or row-col in dig1 or row+col in dig2:continuecols.add(col)dig1.add(row-col)#记录主对角线的情况dig2.add(row+col)#记录副对角线的情况backtracking(row+1,cols,dig1,dig2)cols.remove(col)dig1.remove(row-col)dig2.remove(row+col)backtracking(0,set(),set(),set())return self.count