LeetCode51 Python N皇后問題

2021-09-26 20:08:08 字數 1218 閱讀 4098

class solution(object):

"""@param: n: the number of queens

@return: all distinct solutions

"""def solvenqueens(self, n):

# write your code here

ans =

def dfs(nums ,row):

#從上到下一行一行放皇后

#nums[row] = col,表示第row行的皇后放在第col列

if row == n:

#如果放到最後一行,表示放完了

return

for col in range(n):

#對於此時的第row行,我們從左往右先嘗試著放皇后,nums[row] = col

nums[row] = col

if vaild(nums,row):

#如果此時放在row行的第col列,這個位置時是合法的,

#ok繼續向下一行row+1行放皇后

dfs(nums,row + 1)

def vaild(nums,row):

#對於nums[0:row-1],已經是合理的放置位置。

#那麼此時放在row行的第nums[row]位置,是否是合法的

for i in range(row):

#行數肯定不同,因為是從上到下放置的,row一直是增的,

#nums[i] == nums[row]表示列數相同,

#abs(nums[row]-nums[i]) == abs(row-i)表示在對角線上(45度)

if nums[i] == nums[row] or abs(nums[row]-nums[i]) == abs(row-i):

return false

return true

#深度優先遍歷

dfs([none for _ in range(n)],0)

#畫圖results = [ for _ in range(len(ans))]

for i in range(len(ans)):

#ans[i]是一行,ans[i] =j的話就表示在第i行裡把皇后放在第j個位置,

#就是乙個合法的擺放。

for col in ans[i]:

tmp = "."*n

return results

leetcode 字母異位詞分組(python)

題目 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。注意 需熟悉字典的相關使用方法 class so...

leetcode 200 島嶼數量 python

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1示例 2 輸入 11000 11...

leetcode 字母異位詞分組 python3

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。python中使用 字典 維護乙個分組表,鍵值 key...