题解 | #N皇后问题#

N皇后问题

https://www.nowcoder.com/practice/c76408782512486d91eea181107293b6

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param n int整型 the n
# @return int整型
#
class Solution:
    def Nqueen(self , n: int) -> int:
        # write code here

        def isValid(pos, row, col):
            for i in range(row):
                if i == row or col == pos[i] or abs(row-i) == abs(col-pos[i]):
                    return False
            
            return True

        
        def backtrack(n, row, pos, res):
            if row == n:
                res += 1
                return res
            
            for i in range(n):
                if isValid(pos, row, i):
                    pos[row] = i
                    res = backtrack(n, row+1, pos, res)
            return res

        res = 0
        pos = [0]*n

        return backtrack(n, 0, pos, res)
  • 当行数等于n的时候,说明遍历完成了,得到一组解,结果数加一;
  • 否则遍历每一个位置,如果当前位置行列对角没有其他元素,则修改pos[row]值为当前列的值,表示该位置已经确认过了;
  • 之后递归进行下一行的比较。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务