LeetCode刷题(22)

本文介绍了一种使用回溯法解决N皇后问题的方法。通过递归地放置皇后并检查是否违反了攻击规则来寻找所有可能的解决方案。文章提供了一个Python实现示例,详细展示了如何从空棋盘开始逐步构建有效布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

N皇后问题,回溯法。

class Solution(object):
    def solveNQueens(self, n):
        """
        :type n: int
        :rtype: List[List[str]]
        """        
        if n == 1:
            return [["Q"]]
        elif n < 4:
            return []

        x = [0] * (n + 1)
        res = []
        k = 1
        while k>=1:
            x[k] = x[k] + 1
            while x[k]<=n and not valid(x, k):
                x[k] = x[k] + 1
            if x[k] <= n and k == n:
                tmp = []
                for i in range(1, n+1):
                    tmp_s = ""
                    for j in range(n):
                        if x[i] - 1 == j:
                            tmp_s += "Q"
                        else :
                            tmp_s += "."
                    tmp += [tmp_s]
                res += [tmp]
            elif x[k] <= n and k < n :
                k += 1
            else:
                x[k] = 0
                k -= 1

        return res

def valid(x, k):
    for i in range(1, k):
        if x[i] == x[k] or (k - i) == abs(x[k] - x[i]):
            return False
    return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值