【力扣】N皇后 |題號51,52 |經典 |回溯算法|

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章