思路:数组
#遍历二维数组 for i in range(len(board)): for j in range(len(board[0])): #调用helper函数 if self.helper(board,i,j,word,0): return True return False
#定义helper函数: def helper(self,board,i,j,word,index): #若是当前的下标与单词的长度相等,说明前面的全部字母都找到了匹配,返回True if index == len(word): return True #若是当前的下标越界,或是当前的元素字母与单词中的字母不一样,返回False if i < 0 or i >= len(board) or j < 0 or j >= len(board[0]) or board[i][j] != word[index]: return False #要把当前已经通过的数组元素标记 board[i][j] = "*" #递归调用当前元素的上下左右,看有没有与单词的下一个字母相同的 found = self.helper(board,i+1,j,word,index+1)\ or self.helper(board,i,j+1,word,index+1)\ or self.helper(board,i-1,j,word,index+1)\ or self.helper(board,i,j-1,word,index+1) #已经标记的值要复原 board[i][j] = word[index] return found
class Solution(object): def exist(self, board, word): """ :type board: List[List[str]] :type word: str :rtype: bool """ for i in range(len(board)): for j in range(len(board[0])): if self.helper(board,i,j,word,0): return True return False def helper(self,board,i,j,word,index): if index == len(word): return True if i < 0 or i >= len(board) or j < 0 or j >= len(board[0]) or board[i][j] != word[index]: return False board[i][j] = "*" found = self.helper(board,i+1,j,word,index+1)\ or self.helper(board,i,j+1,word,index+1)\ or self.helper(board,i-1,j,word,index+1)\ or self.helper(board,i,j-1,word,index+1) board[i][j] = word[index] return found