题目描述
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解题思路
参考51题,解题思路不变,只是把输出给变了。依然是通过回溯法解题,不再记录每种解法皇后所在的位置,用一个变量记录,当有一次成功解变量值加1.
参考代码
class Solution:
def totalNQueens(self, n: int) -> int:
def backtrack(row):
if row == n:
return 1
else:
count = 0
for i in range(n):
if i in columns or row-i in diagonal1 or row+i in diagonal2:
continue
columns.add(i)
diagonal1.add(row-i)
diagonal2.add(row+i)
count += backtrack(row+1)
columns.remove(i)
diagonal1.remove(row-i)
diagonal2.remove(row+i)
return count
columns = set()
diagonal1 = set()
diagonal2 = set()
return backtrack(0)