题解 | #N皇后问题#
N皇后问题
http://www.nowcoder.com/practice/c76408782512486d91eea181107293b6
class Solution:
def Nqueen(self, n):
def dfs(i, j, n):
if i == n:
self.res += 1
return
for j in range(j, n):
if isok(i, j):
dp[i][j] = 'Q'
dfs(i + 1, 0, n)
dp[i][j] = '.'
#用来判断上方、右上、左上方是否有Q,这里注意每次while后要重定义i,j
def isok(i, j):
ii=i
jj=j
while i>=0:
if dp[i][j] == 'Q':
return False
i-=1
i,j=ii,jj
while i>=0 and j>=0:
if dp[i][j] == 'Q':
return False
i-=1
j-=1
i, j = ii, jj
while i>=0 and j<n:
if dp[i][j] == 'Q':
return False
i-=1
j+=1
return True
# write code here
dp = [['.'] * n for _ in range(n)]
self.res = 0
dfs(0, 0, n)
return self.res