LeetCode第五十二題 Python實現

2021-10-21 21:11:21 字數 2537 閱讀 3620

title: leetcode no.52

categories:

tags:

自己**的開源倉庫:click here 歡迎star和folk ?

n 皇后問題 研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。

給你乙個整數 n ,返回 n 皇后問題 不同的解決方案的數量。

示例 1:

輸入:n = 4

輸出:2

解釋:如上圖所示,4 皇后問題存在兩個不同的解法。

示例 2:

輸入:n = 1

輸出:1

1 <= n <= 9

皇后彼此不能相互攻擊,也就是說:任何兩個皇后都不能處於同一條橫行、縱行或斜線上。

僅對上乙個**進行簡單的修改,即可以得到本題對應的**。

class solution(object):

def judge(self,qipan, placei, placej, n):

""":arg 判斷新位置的皇后是否合法

:type qipan: list[list[str]]

:type placei: int

:type placej: int

:type n: int

:rtype : boolean

"""# 剪枝判斷法: 由於給定當前i和j,又因為是從左上往右下依次放置皇后的,因此不需要判斷行數和列數同時大於當前位置的元素

flag = true

for i in range(n):

for j in range(n):

# 去掉還沒有放置皇后的位置

if i > placei and j > placej:

continue

# 判斷和n在同一行上的位置

if i == placei:

if qipan[i][j] == 'q':

flag = false

return flag

# 判斷和n在同一列上的位置

if j == placej:

if qipan[i][j] == 'q':

flag = false

return flag

# 判斷斜線上的位置, 可以用過計算斜率來確定是否在一條斜線上

if i != placei and j != placej:

if abs(i - placei)/abs(j - placej) == 1:

if qipan[i][j] == 'q':

flag = false

return flag

return flag

def totalnqueens(self, n):

""":type n: int

:rtype: list[list[str]]

核心思想:

首先想到的是回溯法,通過回溯法來遍歷所有的可能,如果滿足條件則選擇該情況,否則撤回選擇

def backtrack(path, selected):

if 滿足停止條件:

for 選擇 in 選擇列表:

做出選擇

遞迴執行backtrack

滿足則return true

如果不滿足要求就撤銷選擇

"""qipan =

for i in range(n):

# print(qipan)

res = # 儲存結果棋盤

def backtrack(qipan, i, n):

""":arg 回溯法

:type qipan: list[list[str]]

:type i: int

:type n: int

"""# 停止條件

if i == n:

import copy

temp = copy.deepcopy(qipan)

once_res =

# 處理一下結果

for m in range(len(temp)):

str1 = ""

for n in range(len(temp[m])):

str1 += temp[m][n]

return

# 遍歷所有選擇

for j in range(n):

# 進行選擇

if self.judge(qipan,i,j,n):

qipan[i][j] = 'q'

backtrack(qipan,i+1,n)

qipan[i][j] = '.' # 撤銷選擇

backtrack(qipan,0,n)

return len(res)

if __name__ == '__main__':

s = solution()

print(s.totalnqueens(1))

PYTHON第五十二天筆記11 7

繼承 字型樣式可以繼承。內聯標籤加上float屬性,可以設長寬。line height對於image無效。內連設定長寬 加float浮動或display inline block,block。課堂 1 抽屜作業標題部分 doctype html html lang en head meta char...

python第五十二課 自定義異常類

myexception.py 實現自定義異常類 class myexception exception def init self,msg super init msg 封裝乙個person類.pyfrom myexception import myexception class person de...

LeetCode第五十四題 螺旋矩陣 JAVA

問題簡介 給定乙個 m x n 個二維陣列 m 行,n 列 按照順時針螺旋順序,返回矩陣中的所有元素。舉例1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10...