題目:給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
示例: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 ...