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)