没看答案,N皇后的改编版,只是用res记录所有结果的个数即可,找符合要求的结果的过程无差别。
class Solution:
def totalNQueens(self, n: int) -> int:
track = []
res = 0
def backtrack(raw):
nonlocal res, n
# 处理结果
if len(track) == n:
res += 1
return
# 按行做选择,所以皇后一定不同行了
for col in range(n):
# 皇后不能同列
if col in track:
continue
# 判断斜线
if raw != 0:
tmp = 0 # 不在同一斜线上的皇后数量
for j in range(raw):
# 存在同一斜线上的皇后
if abs(track[j]-col) == abs(j-raw):
if track[j] == 0 and col == n-1:
tmp += 1
else:
break
tmp += 1
if tmp != raw:
continue
track.append(col)
raw += 1
backtrack(raw)
raw -= 1
track.pop()
backtrack(0)
return res