LeetCode 52. N皇后 II

本文介绍了一种解决N皇后问题的方法,并详细解释了如何通过深度优先搜索(DFS)来计算不同解决方案的数量。文章强调了在DFS函数中确定皇后放置位置的过程,以及避免冲突的具体实现。

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

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

 

还是N皇后问题,这道题贴出来是记录下我这次写这道题明白的一些东西。

1. 代码中的DFS函数的作用是:找到在 level 这一层的皇后的放置位置,其实就是找到level这一层的所有地址内哪一个位置放置皇后,
    使得最终N皇后放完之后各皇后之间都不发生冲突。

2. 在N皇后问题里面的DFS函数中不需要判断地址是否越界,这一点不同于迷宫找路问题,因为N皇后问题在测试放置位置可不可的时候就是
    for i in range(n),后面又没有地址的相加减,因此不会越界,这一点和迷宫找路问题区分开。
class Solution:
    
    def dfs(self,level,n):
        if level == n:
            self.count += 1
            return 
        for j in range(n):
            y = level
            x = j
            flag = True
            for index_x,index_y in self.index:
                if x == index_x or abs(x - index_x) == abs(y - index_y):
                    flag = False
                    break
            if flag:
                self.index.add((j,level))
                self.dfs(level+1,n)
                self.index.remove((j,level))
            
        
        
    def totalNQueens(self, n: int) -> int:
        
        self.count = 0
        self.index = set()
        
        self.dfs(0,n)
        
        return self.count

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值