N皇后問題在力扣有兩道題,這是經典的回溯算法問題。
n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。
52:N皇后
給定一個整數 n,返回 n 皇后不同的解決方案的數量。
算法:
class Solution:
def totalNQueens(self, n: int) -> int:
self.res=0
def helper(n,ls=[]):
if len(ls)==n:
self.res+=1
return
for i in range(n):
if ls:
for idx,j in enumerate(ls):
if i==j or abs(i-j)==len(ls)-idx:break
else:
helper(n,ls+[i])
else:
helper(n, ls + [i])
helper(n)
return self.res
執行用時 :88 ms, 在所有 Python3 提交中擊敗了44.17%的用戶
內存消耗 :13.6 MB, 在所有 Python3 提交中擊敗了20.00%的用戶
51:N皇后
給定一個整數 n,返回所有不同的 n 皇后問題的解決方案。
每一種解法包含一個明確的 n 皇后問題的棋子放置方案,該方案中 ‘Q’ 和 ‘.’ 分別代表了皇后和空位。
算法:
直接在52的基礎上做改進。
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
res=[]
def helper(n,ls=[]):
if len(ls)==n:
t=[]
for i in ls:
t.append('.'*(i-0)+'Q'+'.'*(n-1-i))
res.append(t)
return
for i in range(n):
if ls:
for idx,j in enumerate(ls):
if i==j or abs(i-j)==len(ls)-idx:break
else:
helper(n,ls+[i])
else:
helper(n, ls + [i])
helper(n)
return res