n皇后问题是将n个皇后放置在一个n x n的棋盘上,使得任意两个皇后都不会互相攻击的问题。
给定一个整数n,返回n皇后问题的不同解决方案数量。
它在n=8时失败。我无法弄清原因,也不知如何少进行迭代。看来我已经在尽可能少的迭代次数下进行了操作。
给定一个整数n,返回n皇后问题的不同解决方案数量。
https://leetcode.com/problems/n-queens-ii/
我的解决方案:
class Solution:
def totalNQueens(self, n: int) -> int:
def genRestricted(restricted, r, c):
restricted = set(restricted)
for row in range(n): restricted.add((row, c))
for col in range(n): restricted.add((r, col))
movements = [[-1, -1], [-1, 1], [1, -1], [1, 1]]
for movement in movements:
row, col = r, c
while 0 <= row < n and 0 <= col < n:
restricted.add((row, col))
row += movement[0]
col += movement[1]
return restricted
def gen(row, col, curCount, restricted):
count, total_count = curCount, 0
for r in range(row, n):
for c in range(col, n):
if (r, c) not in restricted:
count += 1
if count == n: total_count += 1
total_count += gen(row + 1, 0, count, genRestricted(restricted, r, c))
count -= 1
return total_count
return gen(0, 0, 0, set())
它在n=8时失败。我无法弄清原因,也不知如何少进行迭代。看来我已经在尽可能少的迭代次数下进行了操作。