51. N 皇后

class Solution:
    def solveNQueens(self, n):
        def is_valid(row, col, path):
            # 检查列
            for i in range(row):
                if path[i][col] == 'Q':
                    return False  # 当前列已经存在皇后,不合法

            # 检查 135 度角是否有皇后
            i, j = row - 1, col - 1
            while i >= 0 and j >= 0:
                if path[i][j] == 'Q':
                    return False  # 左上方向已经存在皇后,不合法
                i -= 1
                j -= 1

            # 检查 45 度角是否有皇后
            i, j = row - 1, col + 1
            while i >= 0 and j < len(path):
                if path[i][j] == 'Q':
                    return False  # 右上方向已经存在皇后,不合法
                i -= 1
                j += 1

            return True  # 当前位置合法

        def backtracking(path, row):
            if row == n:
                res.append(path[:])
            else:
                for col in range(n):  # col是列
                    if is_valid(row, col, path):
                        path[row] = path[row][:col] + "Q" + path[row][col+1:]
                        backtracking(path, row+1)
                        path[row] = path[row][:col] + "." + path[row][col+1:]

        res = []
        chessboard = ["."*n for _ in range(n)]
        row = 0  # 行
        backtracking(chessboard, row)
        return res


n = 4
print(Solution().solveNQueens(n))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值