题目
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[“.Q..”, // 解法 1
“…Q”,
“Q…”,
“..Q.”],
[“..Q.”, // 解法 2
“Q…”,
“…Q”,
“.Q..”]
]
代码
class Solution:
def __init__(self):
self.paths_count = 0
def dpTotalNQueens(self, n, prefix, level):
for i in range(0, n):
point = (i, level)
is_valid = True
for m in range(0, len(prefix)):
if i == prefix[m]:
is_valid = False
break
if level - m == i - prefix[m] or level - m == prefix[m] - i:
is_valid = False
break
if is_valid:
new_prefix = prefix[:]
new_prefix.append(i)
if n - 1 != level:
self.dpTotalNQueens(n, new_prefix, level + 1)
else:
self.paths_count += 1
# @return an integer
def totalNQueens(self, n):
self.dpTotalNQueens(n, [ ], 0)
return self.paths_count