leetcode刷題python之單詞搜尋

2021-09-29 09:49:54 字數 1261 閱讀 3899

題目:給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。

示例:board =

[[『a』,『b』,『c』,『e』],

[『s』,『f』,『c』,『s』],

[『a』,『d』,『e』,『e』]

]給定 word = 「abcced」, 返回 true.

給定 word = 「see」, 返回 true.

給定 word = 「abcb」, 返回 false.

思路:回溯演算法,判斷當前的值是否是滿足要求,回溯的核心是如何迭代與返回什麼,在我們這個情況下,先要判斷當前值是否滿足條件,然後再迭代的時候,對座標進行更新,對目前單詞的長度進行更新,對已經走過的點的座標列表進行更新;我們需要返回的是true or false ,true**與進行了k次迭代,長度達到要求,false**於能走的路都走完了(迴圈結束),還沒有到true。

class solution:

def exist(self, board: list[list[str]], word: str) -> bool:

row = len(board)

col = len(board[0])

def backtrack(i, j, k, visited):

if k == len(word):

return true

for x, y in [(1, 0), (0, 1), (-1, 0), (0, -1)]:

x_ = i + x

y_ = j + y

if 0 <= x_ < row and 0 <= y_ < col and [x_, y_] not in visited and board[x_][y_] == word[k]:

if backtrack(x_, y_, k+1, visited):

return true

visited.remove([x_, y_])

return false

for i in range(row):

for j in range(col):

if board[i][j] == word[0] and backtrack(i, j ,1, [[i, j]]): # 先判斷是否相等是為了對初始值也是board[0][0]判斷

return true

return false

Leetcode鍊錶刷題 pytho語言

為方便後續的使用查詢,記錄一下 函式包括 找到兩個單鏈表相交的起始節點 反轉單鏈表 刪除鍊錶中等於給定值 val 的所有節點 definition for singly linked list.class listnode object def init self,x self.val x self...

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...