注释如下:
- class Solution:
- def totalNQueens(self, n: int) -> int:
- if n < 1: # 如果 n 小于 1,直接返回 0
- return 0
- count = 0 # 初始化解的个数为 0
- stack = [(0, set(), set(), set())] # 初始化一个栈,元素为当前处理的行数、已经放置皇后的列数、左上到右下的对角线和、右上到左下的对角线和
- while stack: # 如果栈不为空
- row, cols, xy_diff, xy_sum = stack.pop() # 取出栈顶元素
- if row == n: # 如果已经处理完 n 行,解的个数加 1,继续处理下一个
- count += 1
- continue
- for col in range(n): # 遍历当前行的每一列
- if col in cols or row - col in xy_diff or row + col in xy_sum: # 如果当前列已经被占据,或者在左上到右下的对角线或右上到左下的对角线上
- continue # 跳过这一列
- stack.append((row+1, cols | {col}, xy_diff | {row-col}, xy_sum | {row+col})) # 否则,将当前行数加一、已占据列数加上当前列、左上到右下的对角线和加上当前元素、右上到左下的对角线和加上当前元素的元组入栈
- return count # 返回解的个数
算法步骤: