52. N皇后 II

题目描述

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

上图为 8 皇后问题的一种解法。

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

示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]

我的代码

class Solution:
    def totalNQueens(self, n: int) -> int:
        cols = [0] * n
        hill_diagonals = [0] * (2 * n - 1)
        dale_diagonals = [0] * (2 * n - 1)

        def backtrack(row = 0, ans = 0):
            for col in range(n):
                if not (cols[col] + hill_diagonals[row - col] + dale_diagonals[row + col]):
                    cols[col] = 1
                    hill_diagonals[row - col] = 1
                    dale_diagonals[row + col] = 1

                    if row + 1 == n:
                        ans += 1
                    else:
                        ans = backtrack(row + 1, ans)

                    cols[col] = 0
                    hill_diagonals[row - col] = 0
                    dale_diagonals[row + col] = 0

            return ans

        return backtrack(0, 0)

展开阅读全文
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值