N Queens(N皇后问题)I, II

N皇后问题是很经典的DFS问题,这道题最关键的步骤就是找到判定皇后之间会不会互相攻击的方法,通过循环参数来表示列数以及利用一个start变量来表示行数,最后再通过同一对角线上的横纵坐标加减结果是一样来判断对角线,这里一道是需要画出棋盘,一道是仅仅统计符合条件的数量

下面是II

class Solution(object):
    def totalNQueens(self, n):
        """
        :type n: int
        :rtype: int
        """
        col, left_dia, right_dia = set([]), set([]), set([])
        res = [0]
        self.helper(0, n, col, left_dia, right_dia, res)
        return res[0]

    def helper(self, start, end, col, left_dia, right_dia, res):
        for i in xrange(end):
            if i in col:
                continue
            if start - i in left_dia:
                continue
            if start + i in right_dia:
                continue
            if start >= end - 1:
                res[0] += 1
            else:
                col.add(i)
                left_dia.add(start - i)
                right_dia.add(start + i)
                self.helper(start + 1, end, col, left_dia, right_dia, res)
                col.remove(i)
                left_dia.remove(start - i)
                right_dia.remove(start + i)

results matching ""

    No results matching ""