LeetCode---每日一题 117.N皇后||

LeetCode每日一题—N皇后

问题:

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

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

问题分析

对于N皇后问题来讲,比较好理解的就是回溯算法,回溯算法就是一种试的办法,利用条件剪枝从而减少复杂程度。既然要一步一步的试,那我们就要找一个方法进行搜索,这样才能进行取出来试,我们采用DFS的搜索方法,DFS搜索是递归方法,这在平常算法题中经常遇到

问题解决

在这里插入图片描述

def totalNQueens(self, n):
        """
        :type n: int
        :rtype: int
        """
        def valid(nums,row):   #判断是否满足条件
            for i in range(row):
                if abs(nums[i]-nums[row])==abs(row-i) or nums[i]==nums[row]:  #对于在同一对角线,行与行差值的绝对值与列于列差值的绝对值相等
                    return  False
            return  True

        def dfs(nums,row):      #回溯法 深度优先探索解空间
            if row==n:     #当我们把八个行都放好,说明这个可以实现
                ans.append(nums[:])
                return
            for i in range(n):
                nums[row]=i       #row代表所在的行,nums[row]代表所在的列
                if valid(nums,row):
                    dfs(nums,row+1)
        ans=[]
        a=[0 for _ in range(n)]
        dfs(a,0)
        return len(ans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值