边工作边刷题:70天一遍leetcode: day 28
N-Queens II
如果和N-Queens I一样用dfs的方法,注意因为python或者java是pass by value,所以用返回值返回count。这里如何返回和累加容易搞混:因为dfs是树形结构,所以只在找到一个结果后(或者leaf结点)返回1,上层做累加,直到return back到顶层。
不过这题据说还有更精妙的方法,求知道的童鞋给提示。
class Solution(object):
def totalNQueens(self, n):
"""
:type n: int
:rtype: int
"""
def dfs(rn, n, pos):
if rn >= n:
return 1
count = 0
for j in range(n):
valid = True
for i in range(rn):
if pos[i]==j or abs(rn-i)==abs(j-pos[i]):
valid = False
if valid:
pos[rn]=j
count+=dfs(rn+1, n, pos)
return count
count = 0
pos = [-1 for i in range(n)]
return dfs(0, n, pos)