Leetcode 79 Word Search
阿新 • • 發佈:2020-10-25
題目介紹
給定一個二維陣列以及單詞,判斷單詞是否存在於該陣列中。要求按順序,且只能相鄰(水平或垂直方向)查詢。每個字母只能使用一次。
Examples:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
Given word = "ABCCED", return true.
Given word = "SEE", return true.
Given word = "ABCB", return false
Solution
使用回溯,當查詢到某個字母相等時,再以該座標出發去尋找是否相鄰位置有下一個字母。而由於每個字母只能使用一次,因此,需要對已經遍歷過的字母做標記。
class Solution(object): def exist(self, board, word): """ :type board: List[List[str]] :type word: str :rtype: bool """ if not board or not word: return False m, n = len(board), len(board[0]) def helpfunc(i, j, k): # 優先判斷k,否則只有一個字母的單詞會返回False if k == len(word): return True if i<0 or i>=m or j<0 or j>=n: return False # 標記已經使用的字母 if board[i][j] == word[k]: board[i][j] = 0 if helpfunc(i, j-1, k + 1) or helpfunc(i, j+1, k+1) or helpfunc(i-1, j, k+1) or helpfunc(i+1, j, k+1): return True # 恢復標記 board[i][j] = word[k] for i in range(m): for j in range(n): if helpfunc(i, j, 0): return True return False