目录

0052:N 皇后 II(★★)

力扣第 52 题

题目

n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

示例 1:

输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 9

分析

0051 简化版。

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Solution:
    def totalNQueens(self, n: int) -> int:
        def dfs(i):
            if i==n:
                self.res += 1
                return
            for j in range(n):
                if C[j]==D1[i+j]==D2[i-j]==0:
                    C[j]=D1[i+j]=D2[i-j]=1
                    dfs(i+1)
                    C[j]=D1[i+j]=D2[i-j]=0
        C,D1,D2 = [defaultdict(int) for _ in range(3)]
        self.res = 0
        dfs(0)
        return self.res

43 ms