N皇后问题,回溯法。
class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""
if n == 1:
return [["Q"]]
elif n < 4:
return []
x = [0] * (n + 1)
res = []
k = 1
while k>=1:
x[k] = x[k] + 1
while x[k]<=n and not valid(x, k):
x[k] = x[k] + 1
if x[k] <= n and k == n:
tmp = []
for i in range(1, n+1):
tmp_s = ""
for j in range(n):
if x[i] - 1 == j:
tmp_s += "Q"
else :
tmp_s += "."
tmp += [tmp_s]
res += [tmp]
elif x[k] <= n and k < n :
k += 1
else:
x[k] = 0
k -= 1
return res
def valid(x, k):
for i in range(1, k):
if x[i] == x[k] or (k - i) == abs(x[k] - x[i]):
return False
return True