LeetCode 52. N 皇后 II

n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
示例 1:
在这里插入图片描述
输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1
输出:1
提示:
1 <= n <= 9

class Solution:
    def totalNQueens(self, n: int) -> int:
        res_list = []
        land = [[False] * n for _ in range(n)]
        return self.backtrack(0, land, n, set([i for i in range(n)]))

    def backtrack(self, x, land, left_queens, cols):
        if left_queens == 0:
            
            return 1

        n, res = len(land), 0
        for y in cols:
            flag = False
            for i in range(n):
                for _x, _y in [
                    (x - i, y - i),
                    (x + i, y - i),
                    (x - i, y + i),
                    (x + i, y + i),
                ]:
                    if 0 <= _x < n and 0 <= _y < n:
                        flag |= land[_x][_y]
            if flag:
                continue
            land[x][y] = True
            new_cols = cols.copy() - set([y])
            left_queens -= 1
            res += self.backtrack(x + 1, land, left_queens, new_cols)
            left_queens += 1
            land[x][y] = False
        return res

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部